Множественное наследование JavaScript и instanceof

Возможный дубликат:
множественное наследование JavaScript

Есть ли способ в JavaScript сделать это:

Foo = function() {

};

Bar = function() {

};

Baz = function() {
    Foo.call(this);
    Bar.call(this);
};

Baz.prototype = Object.create(Foo.prototype, Bar.prototype);

var b = new Baz();
console.log(b);
console.log(b instanceof Foo);
console.log(b instanceof Bar);
console.log(b instanceof Baz);

Так что Baz является одновременно экземпляром Foo и Bar?


person Petah    schedule 29.01.2013    source источник
comment
Это обсуждалось по этому вопросу: stackoverflow.com/questions/7373644/   -  person Ismael Ghalimi    schedule 29.01.2013
comment
@IsmaelGhalimi, так оно и было. Я прочитал этот вопрос и только его принятый ответ. Хотя там есть ответ, я бы не назвал это дубликатом.   -  person Petah    schedule 29.01.2013
comment
Позвольте мне прочитать его еще раз и ответы на ваш вопрос. Я мог что-то упустить. Извините, если я сделал.   -  person Ismael Ghalimi    schedule 29.01.2013
comment
Дополнительный ответ на другой вопрос является правильным для этого вопроса. Это, однако, не означает, что этот вопрос является дубликатом этого вопроса.   -  person Petah    schedule 29.01.2013


Ответы (1)


В JavaScript нет множественного наследования. instanceof тестирует цепочку прототипов, которая является линейной. Однако у вас могут быть примеси, что в основном вы и делаете с Foo.call(this); Bar.call(this). Но это не наследование; в Object.create второй параметр дает только свойства для копирования и не является родительским.

person Amadan    schedule 29.01.2013
comment
Если instanceof не работает, есть ли другой способ проверить, наследуется ли объект от двух разных классов? - person streetlight; 10.04.2014
comment
@streetlight: Нет. В JavaScript я думаю, что проверка способностей имеет больше смысла, чем проверка отцовства. То есть, скажем, вы наследуете от Dog; вместо if (x instanceof Dog) x.bark() вы бы написали if (x.bark) x.bark(); (или более безопасно, но более подробно, if (typeof(x.bark) == "function") x.bark()). - person Amadan; 11.04.2014