我有以下代码。我希望在我的firebug控制台上看到“archive”对象,但是我看到了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);
答案 0 :(得分:6)
oArchive.action.test2
为您提供callback
指向的函数的引用,然后使用callback()
调用该函数,这意味着它不会被调用为方法,因此{ {1}}是全局对象。关键点是this
没有绑定到函数:它取决于函数的调用方式。
在这种情况下,您可以使用回调函数的this
或this
方法显式地使call
指向操作对象(而不是归档对象):
apply
要使test: function(callback) {
callback.call(this);
},
成为归档对象,您需要在以下位置传递归档对象:
this