【发布时间】:2017-02-25 09:50:31
【问题描述】:
我想使用 javascript 中的原型从超类创建一个子类,所以我设置了它们:
var SuperClass = function() {
this.a = 1;
this.get = function() {return this.a;}
this.init = function() {
CreateStrangeThings();
}
this.init();
}
var SubClass = function() {
this.b = 2;
this.get = function() {return this.b;}
}
SubClass.prototype = new SuperClass();
问题是,SubClass.prototype = new SuperClass(); 行调用了CreateStrangeThings(); 函数。我希望仅在我创建子类对象 (var subOjbect = new SubClass();)
如何解决这个问题?也许我应该使用 SubClass.prototype = SuperClass; ?明智吗?
编辑:
SubClass.prototype = SuperClass;
从子类中删除“a”属性
【问题讨论】:
-
那么为什么不在
SubClass构造函数中包含CreateStrangeThings()函数呢? -
"CreateStrangeThings()" 必须在我的应用程序设计中的每个基类中启动,并且不应在编码中重复(真正的 OOP)
-
SubClass.prototype = SuperClass只会使您的SubClass.prototype成为一个函数。避免这种情况。还要注意您在原型链中隐藏了您的get函数,该函数预计将由返回this.b的实例化对象中的get函数返回this.a。此外,CreateStrangeThings()究竟做了什么……? -
在设置基类时不应该做的事情。 (它创建图形)
-
顺便说一句,您不应该使用从构造函数调用的
init方法。而是将代码直接放在构造函数中。
标签: javascript inheritance constructor prototype