假设我有这样的 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和applypassthisArg值无需修改)