2013-03-18 3 views
3

Я заметил, что с помощью свойства «prototype» в Javascript (и косвенно настраивая цепочку прототипов) можно реализовать многоуровневое наследование в JavaScript. Но возможно ли каким-то образом реализовать множественное наследование в Javascript? Любые простые примеры были бы замечательными.Внедрить множественное наследование в Javascript

ответ

5

Для реализации простого наследования вы обычно делаете

MyClass.prototype = new MySuperClass(); 

но вы можете также скопировать содержимое другого «класса»:

MyClass.prototype = new MySuperClass(); 
var myOtherSuperClass = new MyOtherSuperClass(); 
for (var key in myOtherSuperClass) { 
    MyClass.prototype[key] = myOtherSuperClass[key]; 
} 

Конечно, вы могли бы использовать утилиту как jQuery.extend, чтобы сделать это , или сверните свой собственный.

Предел в том, что instanceof не обнаружит MyOtherSuperClass.

1

Просто, чтобы быть ясным, JS не имеет множественного наследования.

Каждый объект может иметь только один прототип.

Однако, поскольку EVERYTHING является изменяемым, он может поддерживать «mixins», что и есть методы расширения. Они просто копируют ключи одного объекта в другой. Однако это не наследование. Обычно в этой схеме результирующий объект будет иметь только один proto, который является объектом.

1

Возможно реализовать множественное наследование в JavaScript, хотя это очень мало библиотек. Единственный пример, который я знаю, - Ring.js.

Конечно, это не зависит только от прототипов, поэтому instanceof не работает. Но библиотека обеспечивает замену, поэтому это не имеет большого значения.

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