【发布时间】:2014-02-11 22:42:32
【问题描述】:
这是我的超类:
function Element() {
var name;
this.setName(n) = func()...{};
this.getName() = func()..{return name};
}
我的另一个子班:
Select = null;
...
Select =
function (n) {
if (typeof n !== "undefined")
this.setName(n);
...
}
Select.prototype = new Element();
Select.prototype.constructor = Select;
那么,我在说什么“奇怪的时刻”?这里是:
var e1 = new Select("element1");
e1.getName(); // return "element1"
var e2 = new Select(); // WITHOUT NAME
e2.getName(); // return "element1"!!! should be ""!
这是一个相当可预测的行为,但如何解决这个问题?
当然,我可以在Element 中制作类似this.clear() 的东西,这将清除属性并将此方法放入Select 函数中,但也许有合适的解决方案?
【问题讨论】:
-
不喜欢私有财产。
-
@wared yeeh 很棒的解决方案)
-
您应该将此行
Element.call(this, n)添加到Select。 -
更多关于如何继承和使用构造函数可以在这里找到stackoverflow.com/a/16063711/1641941,比如如何重用父构造函数以及为什么你不应该创建一个Parent实例来设置Child的原型部分。
-
顺便说一句,您可能会考虑不覆盖全局
Elementinterface...
标签: javascript prototype prototypal-inheritance