2013-04-20 3 views
1

ОК, скажем, у меня есть конструктор, как этот:Конструктор наследуют от Конструктора

var Base = function() {}; 
Base.prototype.shmoo = function() { this.foo="shmoo"; } 

Как создать другие конструкторы расширения Base независимо от него и отдельно друг от друга, а?

Другими словами, расширение функциональных возможностей производного конструктора затрагивает только его объекты и ни один другой, ни Base, ни другой полученный.

Я попытался

Extender = function() {}; 
Extender.prototype = Base.prototype; 
Extender.prototype.moo = function() { this.moo="boo"; }; 

но вступает в силу во всем мире, конечно.

Должен ли я имитировать иерархию классов? Я стараюсь держаться подальше от этой картины.

+0

точно такая же проблема, как и в [Почему я не могу вызвать метод в прототип JavaScript?] (Http://stackoverflow.com/questions/12500637/why-cant-i-call-a-prototyped-method-in-javascript) – Bergi

ответ

1

Это будет осуществлять прототипичный наследование (что вы хотите):

// The Extender prototype is an instance of Base but not Base's prototype  
Extender.prototype = new Base(); 

// Set Extender() as the actual constructor of an Extender instance 
Extender.prototype.constructor = Extender; 
+1

10x это работает так, как должно, BR – kotio

+0

[Не используйте 'new' для создания прототипа экземпляров объектов!] (http://stackoverflow.com/questions/12592913/what-is-the-reason-to-use-the-new-keyword-here) – Bergi

Смежные вопросы