试图了解在JavaScript inheritnace和完全糊涂如何继承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