原型继承,setTimeout和clearTimeout

时间:2013-01-30 21:47:42

标签: javascript

我很困惑。

我创建了两个共享相同原型的对象,但是当第二个对象触发run()方法时,我希望它能够停止在共享继承对象{{1 (timer)。

如果我将所有内容更改为使用全局变量而不是Foo.prototype.timer,则可以使用..

如果两个对象共享相同的Foo.prototype.timer

,为什么不清除
Foo.prototype.timer

(请在您的控制台中复制并运行此代码以查看此问题。)

2 个答案:

答案 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 );