【发布时间】:2010-09-20 15:30:25
【问题描述】:
我在尝试让类变量在 javascript 中工作时遇到了一些麻烦。
我以为我了解原型继承模型,但显然不是。我假设既然原型将在对象之间共享,那么它们的变量也会如此。
这就是为什么这段代码让我感到困惑。
实现类变量的正确方法是什么?
function classA() {};
classA.prototype.shared = 0;
a = new classA;
//print both values to make sure that they are the same
classA.prototype.shared;
a.shared;
//increment class variable
classA.prototype.shared++;
//Verify that they are each 1 (Works)
classA.prototype.shared;
a.shared;
//now increment the other reference
a.shared++;
//Verify that they are each 2 (Doesn't Work)
classA.prototype.shared;
a.shared;
更新: 所以似乎每个人都在确认这样一个事实,即通过增加实例的变量我们不会影响原型。这很好,这是我在示例中记录的内容,但这似乎不是语言设计中的错误吗?为什么这种行为是可取的?我觉得奇怪的是,当实例的 var 未定义时,我们会通过隐藏链接到原型中获取 var 的值,但我们将其复制到实例对象中。
我也明白这不是 java/c++/ruby/python,它是一种不同的语言。我只是好奇为什么这种行为可能是好的。
【问题讨论】:
-
我建议你阅读:3site.eu/doc
标签: javascript oop inheritance