我有一个传统方式的类,即
function MyClass() {
}
MyClass.prototype = {
};
现在我想创建该类的副本(不是该类创建的实例的副本),但更改了一些原型方法。换句话说,我想用一些扩充来制作一个类的副本......我是否需要使用继承呢?或者它足以循环并为原始原型和新原型分配对我的新类的引用?
答案 0 :(得分:9)
我会使用普通继承。试试这个:
var MyClass = function(){};
MyClass.prototype = {
foo: function(){ alert('foo') },
bar: function(){ alert('bar') }
};
var MySubClass = function(){};
MySubClass.prototype = new MyClass();
MySubClass.prototype.bar = function(){ alert('otherbar') };
var my = new MyClass();
var mysub = new MySubClass();
my.foo(); // foo
my.bar(); // bar
mysub.foo(); // foo
mysub.bar(); // otherbar
答案 1 :(得分:4)
组合继承(有时也称为伪经典继承)结合了原型链和构造函数窃取,以获得每种方法的最佳效果。
function SuperType(name){
this.name = name;
this.colors = ['red', 'blue', 'green'];
}
SuperType.prototype.sayName = function(){
alert(this.name);
};
function SubType(name, age){
//inherit properties
SuperType.call(this, name);
this.age = age;
}
//inherit methods
SubType.prototype = new SuperType();
答案 2 :(得分:1)
仅仅克隆你的类是不合逻辑的,类是指共享的charactaristics,如果你想克隆它的类 事件不合逻辑而不是只是克隆你应该使用它来插入它的对象。 您应该使用继承来创建现有类的子类。
阅读有关不合情理的完整文章https://developer.mozilla.org/en/JavaScript/Guide/Inheritance_Revisited