是否有更好的方法让类从另一个类继承原型方法,并且仍然能够在继承的类上定义新的原型方法:
var ParentConstructor = function(){
};
ParentConstructor.prototype = {
test: function () {
console.log("Child");
}
};
var ChildConstructor = function(){
ParentConstructor.call(this)
};
ChildConstructor.prototype = {
test2: "child proto"
};
var TempConstructor = function(){};
TempConstructor.prototype = ParentConstructor.prototype;
ChildConstructor.prototype = new TempConstructor();
ChildConstructor.prototype.constructor = ChildConstructor;
var child = new ChildConstructor();
child.test();
console.log(child.test2)
console.log(child, new ParentConstructor());
哪个不起作用,因为当我从test2
添加继承时,我丢失了ParentConstructor
原型方法/属性。
我已经尝试过其他方法来扩展类的原型方法,其中一些原型道具形成其他类但我每次都失败了,因为我找不到每次都不覆盖以前方法的方法。
我也试过了var Child = Object.create(Parent.Prototype)
,但是当我定义新道具时,我失去了父道具。
答案 0 :(得分:2)
在ChildConstructor
原型上定义新属性之前,应该先设置继承。当您定义新的原型属性时,您也不应该覆盖整个prototype
属性。相反,您可以像添加constructor
属性一样添加新属性:
ChildConstructor.prototype = new ParentConstructor();
ChildConstructor.prototype.constructor = ChildConstructor;
ChildConstructor.prototype.test2 = "child proto";
答案 1 :(得分:0)
我能想到的最好的例子来自:
http://robertnyman.com/2008/10/06/javascript-inheritance-how-and-why/
function Being() {
this.living = true;
this.breathes = function () {
return true;
};
}
function Robert() {
// Robert.prototype = new Being(); /* edit */
this.blogs = true;
this.getsBored = function () {
return "You betcha";
};
}
Robert.prototype = new Being();
Robert.prototype.newMethod = function() {
console.log('new method executed');
return this;
}
注意这个例子,已经更新,下面的第一个注释是针对我的第一个代码,其中包含了Robert方法中的原型。