克隆JavaScript类的最佳方法

时间:2011-03-28 12:29:42

标签: javascript class clone

我有一个传统方式的类,即

function MyClass() {
}

MyClass.prototype = {
};

现在我想创建该类的副本(不是该类创建的实例的副本),但更改了一些原型方法。换句话说,我想用一些扩充来制作一个类的副本......我是否需要使用继承呢?或者它足以循环并为原始原型和新原型分配对我的新类的引用?

3 个答案:

答案 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