簡體   English   中英

從html動態調用javascript對象函數

[英]Dynamically call javascript object function from html

我正在開發一種基於JavaScript文本的JavaScript游戲引擎。 我有一個帶有“ onuse”方法的javascript對象。 當我像這樣使用它時,它的運行效果非常好:

var button = new CanvasObject();
button.text = "test" // Necessary for the next code sample
button.onuse = function(){ button.x += 1 }; // Some simple reaction;

我在Canvas對象中有代碼,在繪制CanvasObject時會將其包裝在span標簽中,如下所示:

<span onclick = "function{ button.x += 1 }">test</span>
// Or to make the HTML cleaner:
<span onclick = canvas.callFunction(5)>test</span>
// where canvas.callFunction will call the function needed.
// Canvas keeps an array of functions that can be called.

Canvas將調用該函數,並且由於它使用“絕對”術語,因此行“ button.x + = 1”可以正常工作。 問題是我有另一個從CanvasObject擴展的類,例如ButtonObject。 我希望類定義具有已定義的onuse函數。 例如(使用此處列出的繼承技術)

ButtonObject.method('onuse', function(){
   this.x++; // Some function requiring 'this'.
});

當我使用第一種技術從HTML調用函數時,我的引擎會將其作為匿名函數調用。 然后,“ this”將被定義為窗口。 我希望每個ButtonObject實例都具有相同的“ onuse”功能,因此每次像對CanvasObject所做的那樣定義它似乎都需要很多額外的代碼。 我想到的一種可能的解決方案是修改引擎的工作方式,以便為每個對象賦予一個“名稱”屬性,該屬性等同於它的javascript名稱。 這樣,引擎可以簡單地像這樣寫字符串:

innerHTML += ( "<span onclick=' + buttonObjectInstance.name + ".onuse()'>" );

但是,這種技術要求我每次實例化對象時都兩次聲明該對象的名稱,如下所示:

var startButton = ButtonObject('startButton');

這真的是我唯一的選擇嗎? 還是有辦法在沒有對象名稱的情況下在對象的上下文中調用函數?

綁定一個函數到以后:

ButtonObject.method('onuse', function(){
   this.x++; // Some function requiring 'this'.
} .bind(ButtonObject)  );

如果調用上下文中不是ButtonObject,則將其綁定到保存您方法的任何對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM