Лучший способ клонировать класс JavaScript - PullRequest
4 голосов
/ 28 марта 2011

У меня есть класс, объявленный традиционным способом, т.е.

function MyClass() {
}

MyClass.prototype = {
};

Теперь я хочу создать копию этого класса (не копию экземпляра, который создает класс), но изменить некоторые методы-прототипы. Другими словами, я хочу сделать копию класса с некоторыми дополнениями ... мне нужно использовать наследование для этого или мне достаточно циклически повторять и назначать ссылки на мой новый класс для исходного прототипа и нового?

Ответы [ 3 ]

9 голосов
/ 28 марта 2011

Я бы использовал нормальное наследование.Попробуйте это:

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
4 голосов
/ 28 марта 2011

Комбинированное наследование (иногда также называемое псевдоклассическим наследованием) сочетает в себе цепочку прототипов и кражу конструкторов, чтобы получить максимальную отдачу от каждого подхода.

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();
1 голос
/ 28 марта 2011

Нелогично просто клонировать ваш класс, класс означает общую характеристику, если вы хотите просто клонировать класс событие не логично, а не просто клонирование, которое вы должны использовать для определения его объекта. Вы должны использовать наследование для создания подклассов существующего класса. читать полную статью о наследовании в

https://developer.mozilla.org/en/JavaScript/Guide/Inheritance_Revisited

...