假设我有类似的JavaScript代码
myClass = function(){
function doSomething(){
alert(this); // this1
}
}
alert(this); //this2
Run Code Online (Sandbox Code Playgroud)
这两个'这个'对象是指什么?
CMS*_*CMS 15
this全局执行上下文中的值是指全局对象,例如:
this === window; // true
Run Code Online (Sandbox Code Playgroud)
对于函数代码,它实际上取决于您如何调用该函数,例如,在以下this情况下隐式设置该值:
调用没有基础对象引用的函数:
myFunc();
Run Code Online (Sandbox Code Playgroud)
该this值还将引用全局对象.
调用绑定为对象属性的函数:
obj.method();
Run Code Online (Sandbox Code Playgroud)
该this值将参考obj.
使用new运营商:
new MyFunc();
Run Code Online (Sandbox Code Playgroud)
该this值将引用从中继承的新创建的对象MyFunc.prototype.
此外,您可以使用call或apply方法调用函数时显式设置该值,例如:
function test(arg) {
alert(this + arg);
}
test.call("Hello", " world!"); // will alert "Hello World!"
Run Code Online (Sandbox Code Playgroud)
之间的差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
Run Code Online (Sandbox Code Playgroud)
如果第一个参数的值call或者apply是null或undefined,该this值将引用全局对象.
(请注意,将来会有所改变,使用ECMAScript 5,其中call并apply传递thisArg值而不进行修改)
| 归档时间: |
|
| 查看次数: |
1185 次 |
| 最近记录: |