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
.