function Animal(type) { this.type = type; } Animal.prototype.speak = function (voice) { console.log("the: " + this.type + "; speak: " + voice); }; Animal.prototype.favoriteFood = function (food) { console.log("the: " + this.type + "; favorite food: " + food); }; function Dog(type) { Animal.call(this, type); } Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; function Cat(type) { Animal.call(this, type); } Cat.prototype = Object.create(Animal.prototype); Cat.prototype.constructor = Cat; var dog = new Dog("dog"); dog.speak("wangwang"); var cat = new Dog("cat"); cat.favoriteFood("fish");
关键代码:
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
以Animal.prototype为原型新建一个对象, 而Dog的原型指向这个新对象。那么dog就具有了Animal原型对象上的属性和方法。