18.从supertype继承行为

说明

在之前的挑战中,你创建了一个名为Animalsupertype,它定义了所有动物共享的行为:

function Animal() { }
Animal.prototype.eat = function() {
  console.log("nom nom nom");
};

这个和下一个挑战将介绍如何在BirdDog中重复使用Animal方法,而不是再定义它们。它使用一种称为inheritance(继承)的技术。

这个挑战介绍了第一步:创建一个supertype(或父类)的实例。

你已经知道使用new运算符创建Animal的实例的一种方法:

var animal = new Animal();

对于inheritance使用这种语法有一些缺点,这对于此挑战的范围来说太复杂了。相反,这里有一个替代方法没有这些缺点:

var animal = Object.create(Animal.prototype);

Object.create(obj)创建一个新对象,并将obj设置为新对象的prototype。回想一下,prototype就像创建对象的“配方”一样。通过将animalprototype设置为Animalprototype,你实际上将与其他Animal实例相同的“配方”给到了animal实例。

animal.eat(); // prints "nom nom nom"
animal instanceof Animal; // => true


练习

使用Object.create使两个Animal实例命名为duckbeagle。使用 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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值