我正在简化我的例子,以了解我的问题的核心。我有一个具有特权功能的基础Javascript类。我真的需要隐藏myVar而不被人看见,我也真的想继承baseClass
。
function baseClass() {
var myVar = new coolClass();
this.myPrivileged = function() {
myVar.coolFunction();
}
}
我得到的问题是我试图像这样继承:
function childClass() {
}
childClass.prototype = new baseClass();
childClass.prototype.reallyCoolFunction = function() {//Really cool stuff}
但是只会创建一个myVar实例,这将无效,因为coolClass
具有依赖于实例的属性。
所以,如果我这样做:
var x = new childClass();
var y = new childClass();
x和y都具有相同的baseClass.myVar
据我所知,我有两个选择:
myPrivileged
函数成为原型函数并公开myVar
baseClass
的内部复制并粘贴到childClass
(这让我想要堵嘴)我不是javascript大师所以我希望有人会有个好主意。
提前致谢
答案 0 :(得分:0)
首先,您不需要创建baseClass实例来设置继承。您正在创建一个从未使用过的coolClass实例。使用代理构造函数
function childClass() {
...
}
function surrogateCtor() {
}
surrogateCtor.prototype = baseClass;
childClass.prototype = new surogateCtor();
在你的childClass中,你需要调用父的构造函数
function childClass() {
baseClass.call(this);
}
这将确保每次实例化子类http://jsfiddle.net/mendesjuan/h2ypL/时初始化基类
请参阅我在JS http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html
中有关继承的帖子