2
假设我有JavaScript代码像该运营商在JavaScript
myClass = function(){
function doSomething(){
alert(this); // this1
}
}
alert(this); //this2
什么这两个“这个”对象是指为?
假设我有JavaScript代码像该运营商在JavaScript
myClass = function(){
function doSomething(){
alert(this); // this1
}
}
alert(this); //this2
什么这两个“这个”对象是指为?
在全球执行上下文的this
值,指的是全局对象,如:
this === window; // true
功能码,它实际上取决于你如何调用该函数,例如this
值
没有基础对象调用函数参考:
当隐式设置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
如果01的第一个参数值或apply
是null
或undefined
,this
值将引用全局对象。
(注意,这将在未来可能改变,与ECMAScript的5,其中call
和apply
传递thisArg
值不加修改)