我正在開發一個Firefox擴展,我想我現在已經對Javascript有一個基本的誤解,'原型'的概念是確切的。請看下面的小例子,注意區別,當我設置變量this.demo和this.test:與'原型'混淆(Firefox擴展)
var Example = new Array();
Example.Foo = function() {
this.test = null;
this.demo = "World";
};
Example.Foo.prototype = {
initialize : function(resource) {
this.test = "Hello";
this.display();
},
display : function() {
alert(this.test + " " + this.demo);
},
}
window.addEventListener(
"load",
function() {
window.obj = new Example.Foo();
obj.initialize();
},
false
);
當打開火狐我得到預期的輸出:
Hello World
這個作品一貫精細本只要在js源文件中調用display()'即可。然而,當我調用顯示()通過相應的點擊從一個菜單項,例如:
...
<menupopup id="menu_ToolsPopup">
<menuitem label="Example" oncommand="obj.display();"/>
</menupopup>
...
我得到:
null World
初始化()被稱爲事前當然,。
我還是比較新的Javascript和現有的代碼工作。因此,我很困惑目前的行爲。什麼是最好的解決方案是工作?
查閱這些兩篇文章:http://www.javascriptkit.com/javatutors/oopjs2.shtml和http://mckoss.com/jscript/object.htm - 你的代碼是怎麼樣到處都是。有一件事對我來說很有幫助,我認爲,不要將「example」這個名稱用於你的定義和實例;當你的代碼的一半處理「示例」這個和「示例」時,它更令人困惑。在那裏獲得一些真實的條款 - 它會幫助你思考問題。 –
如果您從菜單項調用時檢查「this'是什麼對象,我認爲您會發現它是菜單項而不是您期望的對象。 – some
btw,數組適用於鍵是整數的情況。在這種情況下使用對象:'Example = {}'。 (另外,即使你需要一個數組,你也應該使用'[]'而不是新的數組。 – hugomg