[英]In a JavaScript object literal, should i refer to 'this' or the variable name?
我在使用this
對象字面量中遇到問題,但是當更改為對象變量本身的名稱時,我的問題就解決了。
使用此功能時,出現“ myFunction”不是函數錯誤。
我應該這樣做嗎:
var app = {
init: function() {
this.myFunction();
},
myFunction: function() {
return "Hello world!";
}
};
或這個?
var app = {
init: function() {
app.myFunction();
},
myFunction: function() {
return "Hello world!";
}
};
正確的方法是什么?
這個特定的示例是我的問題的非常簡化的版本,可能不會重現相同的問題,但是它與我遵循的一般模式相同,其中函數將使用this
相互調用。
謝謝,邁克爾。
正確的方法是什么?
兩者都是正確的,具體取決於您要實現的目標。
如果您只打算使用這些方法之一,而又不想將這些方法復制到任何其他對象(可以在JavaScript中完成),那么使用app
可能更有意義。
我的猜測是,使用this
時遇到的問題是您做了這樣的事情:
somethingThatAcceptsACallback(app.init);
要么
someElement.onclick = app.init;
...並且在調用init
時,無法調用myFunction
。 這是因為在JavaScript(現在),一路this
設置主要取決於函數是如何調用 ,而不是其中定義的功能。 在以上兩種情況下,盡管對該函數的引用都被另一個代碼引用,但是當另一個代碼調用它時,它並沒有做任何事情this
設置為app
。
您可以使用ES5的Function#bind
(可以在IE8及更高版本上填充)來創建函數,這些函數在被調用時以正確的this
值調用原始函數:
somethingThatAcceptsACallback(app.init.bind(app));
要么
someElement.onclick = app.init.bind(app);
但是,如果app
是一次性的,則只需在您的函數中使用app
就可以了。
關於this
更多信息(在我的博客上) :
在您的第一個代碼中, 此引用與應用程序引用相同。 我認為我可以建議
var app = {
init: function() {
app.myFunction();
},
myFunction: function() {
return "Hello world!";
}
};
這段代碼可以更好地理解。
在javascript中, this
變化取決於函數的調用方式。 這個問題通常是通過創建一個命名的變量得到解決, self
其被指派值this
的階段,當你知道的肯定值this
var app = {
self: this,
init: function() {
self.myFunction();
},
myFunction: function() {
return "Hello world!";
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.