假设我有这样的 JavaScript 代码
myClass = function(){
function doSomething(){
alert(this); // this1
}
}
alert(this); //this2
那两个“this”对象是指什么?
假设我有这样的 JavaScript 代码
myClass = function(){
function doSomething(){
alert(this); // this1
}
}
alert(this); //this2
那两个“this”对象是指什么?
this
全局执行上下文中的值,指的是全局对象,例如:
this === window; // true
对于函数代码,它实际上取决于您如何调用该函数,例如,在以下this
情况下隐式设置该值:
调用没有基础对象引用的函数:
myFunc();
该this
值还将引用全局对象。
调用绑定为对象属性的函数:
obj.method();
该this
值将参考obj
。
使用new
运算符:
new MyFunc();
该this
值将引用从 继承的新创建的对象MyFunc.prototype
。
此外,您可以在调用函数时使用call
或apply
方法显式设置该值,例如:
function test(arg) {
alert(this + arg);
}
test.call("Hello", " world!"); // will alert "Hello World!"
call
和之间的区别在于apply
,使用apply
,您可以使用数组或arguments
对象正确传递任意数量的参数,例如:
function sum() {
var result = 0;
for (var i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
}
var args = [1,2,3,4];
sum.apply(null, args); // 10
// equivalent to call
sum(1,2,3,4); // 10
如果第一个参数的值call
或者apply
是null
或undefined
,该this
值将引用全局对象。
(请注意,这将在未来更改,使用 ECMAScript 5, wherecall
和apply
passthisArg
值无需修改)