说明
在之前的挑战中,你创建了一个名为Animal
的supertype
,它定义了所有动物共享的行为:
function Animal() { }
Animal.prototype.eat = function() {
console.log("nom nom nom");
};
这个和下一个挑战将介绍如何在Bird
和Dog
中重复使用Animal
方法,而不是再定义它们。它使用一种称为inheritance
(继承)的技术。
这个挑战介绍了第一步:创建一个supertype
(或父类)的实例。
你已经知道使用new
运算符创建Animal
的实例的一种方法:
var animal = new Animal();
对于inheritance
使用这种语法有一些缺点,这对于此挑战的范围来说太复杂了。相反,这里有一个替代方法没有这些缺点:
var animal = Object.create(Animal.prototype);
Object.create(obj)
创建一个新对象,并将obj
设置为新对象的prototype
。回想一下,prototype
就像创建对象的“配方”一样。通过将animal
的prototype
设置为Animal
的 prototype
,你实际上将与其他Animal实例相同的“配方”给到了animal实例。
animal.eat(); // prints "nom nom nom"
animal instanceof Animal; // => true
练习
使用Object.create
使两个Animal
实例命名为duck
和beagle
。使用 console.log 打印出 duck 信息
duck
变量应该被定义。beagle
变量应该被定义。duck
应该是Animal
的实例beagle
应该是Animal
的实例- 请运行
duck.eat()
function Animal() { }
Animal.prototype.eat = function() {
console.log("nom nom nom");
};
答案
方法 | 描述 |
this | 当前执行代码的环境对象 |
prototype | 给对象添加属性和方法。 |
console.log() | 用于在控制台输出信息(浏览器按下 F12 打开控制台)。 |
let | 声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。 |
Object | 构造函数创建一个对象包装器。 |
Object.create() | 创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。 |
function Animal(name,color) {
this.name=name;
this.color=color;
}
Animal.prototype.eat = function() {
console.log("nom nom nom");
};
let duck = Object.create(Animal.prototype);
let beagle = Object.create(Animal.prototype);
duck.eat()