说明
从supertype
构造函数继承其prototype
对象的构造函数除了继承方法之外,还可以拥有自己的方法。
例如,Bird
是一个从Animal
继承其prototype
的构造函数:
function Animal() { }
Animal.prototype.eat = function() {
console.log("nom nom nom");
};
function Bird () { }
Bird.prototype = Object.create(Animal.prototype);
Bird.prototype.constructor = Bird;
除了继承自Animal
的内容外,还需要添加Bird
对象唯一的行为。在这里,Bird
将获得一个fly()
函数。函数被添加到Bird
的prototype
中,与所有构造函数相同:
Bird.prototype.fly = function() {
console.log("我在飞!");
};
现在,Bird
的实例将同时具有eat()
和fly()
方法:
var duck = new Bird();
duck.eat(); // prints "nom nom nom"
duck.fly(); // prints "我在飞!"
练习
添加所有必需的代码,使Dog
对象从Animal
继承,并将Dog
的prototype
中的构造函数设置为Dog。然后在Dog
对象中添加一个bark()
方法,以便beagle
可以同时有eat()
和 bark()
。bark()
方法应该打印“Woof!”到控制台。
Animal
不应该响应bark()
方法。Dog
应该从Animal
继承eat()
方法。Dog
应该有bark()
方法作为自己的
属性beagle
应该是Animal
的实例.beagle
的构造器应该设置为Dog
。
function Animal() { }
Animal.prototype.eat = function() { console.log("nom nom nom"); };
function Dog() { }
// Add your code below this line
// Add your code above this line
var beagle = new Dog();
beagle.eat(); // Should print "nom nom nom"
beagle.bark(); // Should print "Woof!"
答案
方法 | 描述 |
function() | 是一个可以被其他代码或其自身调用的代码片段,或者是一个指向该函数的变量 。 |
Javascript构造函数 | 函数名第一个字母大写。 |
prototype | 给对象添加属性和方法。 |
console.log() | 用于在控制台输出信息(浏览器按下 F12 打开控制台)。 |
Object | 构造函数创建一个对象包装器。 |
Object.create() | 创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。 |
constructor | 返回对创建此对象的数组函数的引用。 |
() => | 箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。 |
var | 声明一个变量,并可选地将其初始化为一个值。 |
new | 创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 |
function Animal() { }
Animal.prototype.eat = function() { console.log("nom nom nom"); };
function Dog() { }
// Add your code below this line
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.bark = () => console.log("Woof!");
// Add your code above this line
var beagle = new Dog();
beagle.eat(); // Should print "nom nom nom"
beagle.bark(); // Should print "Woof!"
运行结果