我很困惑。
我创建了两个共享相同原型的对象,但是当第二个对象触发run()
方法时,我希望它能够停止在共享继承对象{{1 (timer
)。
如果我将所有内容更改为使用全局变量而不是Foo.prototype.timer
,则可以使用..
如果两个对象共享相同的Foo.prototype.timer
?
Foo.prototype.timer
(请在您的控制台中复制并运行此代码以查看此问题。)
答案 0 :(得分:0)
我怎么不让它独一无二?我以为只有独特的东西 位于Foo()本身
您使用this
声明的任何内容对于实例都是唯一的,即使在原型中声明也是如此。得到的是原型不每个对象的属性。
尝试使用模块而不是全局变量,这样您仍然可以将变量设为私有但共享:
var Foo = (function FooClass() {
var timer;
function Foo() {
...
}
Foo.prototype = {
...
};
return Foo;
}());
答案 1 :(得分:0)
使用that.timer
,您不会分配原型 - that
是实例,因此将在那里创建一个新属性。要在protoype上设置属性,您需要明确地执行此操作:
Foo.prototype.timer = setTimeout( calc, 200 ); // or, more verbose:
Object.getPrototypeOf(that).timer = setTimeout( calc, 200 );