【发布时间】:2014-02-05 16:33:43
【问题描述】:
在“回调和范围”部分的第 4 章(函数)中,您可以找到以下示例:
var myapp = {};
myapp.color = "green";
myapp.paint = function (node) {
node.style.color = this.color;
};
var findNodes = function (callback) {
// ...
if (typeof callback === "function") {
callback(found);
}
// ...
};
在我的这本(电子)书的版本中,作者写道:
"如果你调用 findNodes(myapp.paint),它不会按预期工作,因为 this.color 不会被定义。对象 this 将引用全局对象,因为 findNodes() 作为函数调用,不是作为方法。如果 findNodes() 被定义为名为 dom 的对象的方法(如 dom.findNodes()),那么回调内部的 this 将引用 dom 而不是预期的 myapp。"
我不明白这个解释。可能是作者错了?
在我看来,这种论证具有误导性。如果 findeNotes() 作为方法调用或作为函数调用,则与方法 myapp.paint() 中的 this 值无关。在任何一种情况下,this-value 都将引用全局对象,因为它是由调用“callback(found)”的形式确定的(参见http://dmitrysoshnikov.com/ecmascript/javascript-the-core/#this-value)。
谁能帮我找到正确的答案?
【问题讨论】:
标签: javascript design-patterns callback this