我有以下代码.我希望在我的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);
Run Code Online (Sandbox Code Playgroud)
oArchive.action.test2获取对指向的函数的引用,callback然后使用该函数调用callback(),这意味着它不作为方法调用,因此this是全局对象.关键点在于它this没有绑定到函数:它取决于函数的调用方式.
在这种情况下,您可以this使用回调函数call或apply方法显式指向操作对象(但不是归档对象):
test: function(callback) {
callback.call(this);
},
Run Code Online (Sandbox Code Playgroud)
要使它this成为归档对象,您需要在以下位置传递归档对象:
var archive = function(){}
archive.prototype.action = {
test: function(callback, archive){
callback.call(archive);
},
test2: function(){
console.log(this);
}
}
var oArchive = new archive();
oArchive.action.test(oArchive.action.test2, oArchive);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3692 次 |
| 最近记录: |