阅读第4章关于函数的Doug的“Javascript:the goods parts”,讨论“方法调用模式”和“函数调用模式”(第28页)。
当函数存储为对象的属性时,我们将其称为a 方法。调用方法时,此绑定到该对象。
很清楚。然后在同一页面中:
当函数不是对象的属性时,则调用它 作为一个功能:
var sum = add(3,4); //总和是7
当一个功能是 使用此模式调用,此绑定到全局对象。这个 这是语言设计中的一个错误。
我的问题:
感谢.-
编辑:所给出的答案都非常有启发性且记录良好。感谢所有参与者。
答案 0 :(得分:1)
window
是JavaScript中的全局对象。如果您定义这样的函数:
function myFunc() {
}
它将绑定到全局对象window
,并且在函数内使用this
将引用window
对象。如果将函数定义为对象的属性,例如:
var obj = {
myMethod: function() {
}
};
使用this
,它将引用该对象。
答案 1 :(得分:1)
1 - 是
2 - 如果你继续阅读,那么他就会描述一个让它成为“语言设计错误”的例子。
var myObject = {
value: 1
};
myObject.double = function() {
var that = this;
var helper = function() {
alert('in helper, this.value = ' + this.value + ' and that.value = ' + that.value);
that.value = that.value + that.value;
}
helper();
};
myObject.double();
alert('after doubling, myObject.value = ' + myObject.value);
警告将显示在作为对象属性的函数中使用“this”将不起作用。如果全局对象(可能是窗口)有一个.value
,那么就会在该警报中看到。