Пытаясь понять inheritnace в JavaScript и полностью запуталсяКак наследовать анонимные функции javascript, назначенные переменным?
мне просто нужно что DogCat иметь bark
и meow
функции и возможность доступа this
(так или иначе) каждого объекта в наследство цепи:
var cat = function() { this.name = "tom"; this.cat_instance = this; }
var dog = function() { this.name = "bob"; this.dog_instance = this; console.log("cat is here!");}
cat.prototype.meow = function() { console.log("mhew"); }
dog.prototype.bark = function() { console.log("whoof"); }
var DogCat = function() {
DogCat.prototype = dog.prototype;
DogCat.constructor = cat;
console.log("my name is " + this.dog_instance + " " + this.cat_instance);
}
Так DogCat.prototype
теперь (должен?) указывать на прототип dog
и, например, DogCat
Я должен был получить как минимум bark
функцию, но экземпляр не имеет этой функции.
Хорошо тот беспорядок (на мой взгляд), я стараюсь в настоящее время применяются как наследуемые конструкторы к ребенку:
var DogCat = function() {
cat.apply(this);
dog.apply(this);
console.log("my name is " + this.dog_instance + " " + this.cat_instance);
}
Затем указать прототип собаке:
DogCat.prototype = dog.prototype;
var d = new DogCat();
> cat is here!
>my name is [object Object] [object Object]
сейчас Я могу получить доступ к bark
, но как работать с функцией meow
? Как правильно построить прототипы?
UPD
жаль в DogCat
должен быть DogCat.prototype = dog.prototype
, фиксированная
Первое правило прототипов: [Никогда не назначать их внутри конструктора] (http://stackoverflow.com/q/21296559/1048572). Второе правило JS-прототипов: нет [множественного наследования] (https://en.wikipedia.org/wiki/Multiple_inheritance). Сожалею. – Bergi
Благодарим вас за освобождение! но как создавать сложные приложения и избегать того, как избежать дублирования кода? просто переназначая свойства прототипа, такие как 'DogCat.prototype.meow = cat.prototype.meow;'? –
Да, существует гораздо больше шаблонов, чтобы избежать дублирования кода, чем просто наследование. Какой из них подходит для вашей ситуации лучше всего зависит; если вы покажете свой реальный код, мы можем что-то предложить. – Bergi