在 JavaScript 中,如果我有:
var foo = function(){}
foo.prototype.bar = function() {
console.log(this);
}
baz = new foo();
baz.name = 'baz';
bing = new foo();
bing.name = 'bing';
baz.bar();
bing.bar();
setTimeout(baz.bar);
setTimeout(bing.bar);
在我的控制台中,我看到了 baz
, bing
, window
, window
按此顺序记录的对象。
需要看到的最简单或“正常”的诡计是什么:
baz
, bing
, baz
, bing
使用 bar
中的“this-like”变量记录foo
原型(prototype)上的函数?
当我说“this-like”时,我的意思是,我可以在 bar()
中使用的变量访问对象,它是现在和以后的方法。
编辑:
进一步说明,我想避免在调用 bar() 时需要知道它将要使用 this
因此我需要做类似 bind()
的事情.假设当我调用 bar()
在 baz 或 bing 上,它是一个“黑匣子”。我想在不知道它如何工作的情况下将 bar() 作为 bing 或 baz 的方法调用,并且我希望 bar() 的内部结构知道它是哪个对象的方法。
最佳答案
如果您不想使用 bind()
,一个策略是在构建时将您的“绑定(bind)”方法附加到对象,“间接”引用 this
.
这个:
var foo = function(){
var _this = this;
this.bar = function() {
console.log(_this);
}
}
baz = new foo();
baz.name = 'baz';
bing = new foo();
bing.name = 'bing';
baz.bar();
bing.bar();
setTimeout(baz.bar);
setTimeout(bing.bar);
日志:
baz
bing
baz
bing
但总的来说,我喜欢在可能的情况下使用this
,这样我就可以在需要时将我的方法apply()
用于其他对象。我只是将我的“延迟调用”封装在匿名函数中,假设它们使用 this
:
setTimeout(function() { baz.bar(); });
setTimeout(function() { bing.bar(); });
关于javascript - 现在和以后获取函数对象的最简单方法是使用原型(prototype)的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089895/