我有一个以传统方式声明的类,即:
function MyClass() {
}
MyClass.prototype = {
};
现在我想创建该类的一个副本(而不是该类创建的实例的副本),但更改一些原型方法。换句话说,我想制作一个带有一些增强功能的类副本...我需要使用继承吗?还是只需要循环并为原始原型和新原型分配引用即可?
我有一个以传统方式声明的类,即:
function MyClass() {
}
MyClass.prototype = {
};
现在我想创建该类的一个副本(而不是该类创建的实例的副本),但更改一些原型方法。换句话说,我想制作一个带有一些增强功能的类副本...我需要使用继承吗?还是只需要循环并为原始原型和新原型分配引用即可?
我会使用普通继承。试试这个:
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
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();
仅仅克隆你的类并不是一种合乎逻辑的做法,类意味着共享特征,如果你只是想克隆类,那么这甚至不是一种合乎逻辑的方式,相反,你应该使用实例化对象来代替。你应该使用继承来创建现有类的子类。阅读关于继承的完整文章,请访问
https://developer.mozilla.org/en/JavaScript/Guide/Inheritance_Revisited