在 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
内部的“this-like”变量记录bar
foo
当我说“this-like”时,我的意思是一个变量,我可以在其中使用bar()
它来访问对象,它是现在和以后的方法。
编辑:
进一步澄清,我想避免需要知道我何时调用 bar() 它将要使用this
,因此我需要做类似bind()
. 假设当我调用bar()
baz 或 bing 时,它是一个“黑匣子”。我想在不知道它是如何工作的情况下将 bar() 称为 bing 或 baz 的方法,并且我希望 bar() 的内部知道它是什么对象的方法。