说明
当一个对象从另一个对象继承其prototype
时,它也继承了supertype
的constructor属性。
以下是一个例子:
function Bird() { }
Bird.prototype = Object.create(Animal.prototype);
var duck = new Bird();
duck.constructor // function Animal(){...}
但是duck
和Bird
的所有实例都应该表明它们是由Bird
而不是Animal
构建的。因此,你可以手动将Bird
的constructor属性设置为Bird
对象:
Bird.prototype.constructor = Bird;
duck.constructor // function Bird(){...}
练习
修复代码,使duck.constructor
和beagle.constructor
返回各自的构造函数。使用console.log 打印出 duck
Bird.prototype
应该是Animal
的一个实例。duck.constructor
应该返回Bird
。Dog.prototype
应该是Animal
的一个实例。beagle.constructor
应该返回Dog
.
function Animal() { }
function Bird() { }
function Dog() { }
Bird.prototype = Object.create(Animal.prototype);
Dog.prototype = Object.create(Animal.prototype);
// Add your code below this line
var duck = new Bird();
var beagle = new Dog();
答案
方法 | 描述 |
function() | 是一个可以被其他代码或其自身调用的代码片段,或者是一个指向该函数的变量 。 |
prototype | 给对象添加属性和方法。 |
Object | 构造函数创建一个对象包装器。 |
Object.create() | 创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。 |
constructor | 返回对创建此对象的数组函数的引用。 |
var | 声明一个变量,并可选地将其初始化为一个值。 |
new | 创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 |
console.log() | 用于在控制台输出信息(浏览器按下 F12 打开控制台)。 |
function Animal() { }
function Bird() { }
function Dog() { }
Bird.prototype = Object.create(Animal.prototype);
Dog.prototype = Object.create(Animal.prototype);
// Add your code below this line
Bird.prototype.constructor = Bird;
Dog.prototype.constructor = Dog;
var duck = new Bird();
var beagle = new Dog();
console.log(duck.constructor);
console.log(beagle.constructor);
运行结果