Moo*_*oon 6 javascript reference function-call
我问了一个关于Javascript的问题,这指向Window对象关于"this"指向Window对象.
这是源代码
var archive = function(){}
archive.prototype.action = {
test: function(callback){
callback();
},
test2: function(){
console.log(this);
}
}
var oArchive = new archive();
oArchive.action.test(oArchive.action.test2);
Run Code Online (Sandbox Code Playgroud)
Tim Down写道"但是该函数随后使用callback()调用,这意味着它不被称为方法,因此这是全局对象".
通过实际名称调用函数和源代码中显示的callback()之间有什么区别?
当test2中的console.log(this)指向Window时,它是如何指向Window的.
Dan*_*llo 10
在JavaScript中,您可以使用4种不同的调用模式调用函数:
模式主要在this参数初始化方式上有所不同.
当您使用时oArchive.action.test2(),您将使用test2()方法模式调用该函数,并且在这种情况下this将绑定到该action对象.只要调用表达式包含细化(即.点表达式或[subscript]表达式),JavaScript就会使用方法模式.
另一方面,当函数不是对象的属性时,则使用函数模式调用它.在这种情况下,this参数绑定到全局对象,实际上这就是JavaScript调用callback()函数的方式.
Douglas Crockford在他的Good Parts一书中将此描述为语言设计中的一个错误,并提出了一些可能的解决方法.在您的情况下,一个简单的解决方法是使用call()或调用回调apply(),正如Tim Down在您之前的问题中建议的那样:
callback.call(this);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为Apply/Call调用模式允许您选择所需的值this.
| 归档时间: |
|
| 查看次数: |
1720 次 |
| 最近记录: |