说明
JavaScript中的所有对象(除了一些例外)都有一个prototype
。而且,一个对象的prototype
本身就是一个对象。
function Bird(name) {
this.name = name;
}
typeof Bird.prototype; // => object
因为prototype
是一个对象,所以一个prototype
可以有自己的prototype
在这种情况下,Bird.prototype
的prototype
是Object.prototype
:
Object.prototype.isPrototypeOf(Bird.prototype);
//返回true
这样有用吗?你可能会从之前的挑战中回想起hasOwnProperty
方法:
var duck = new Bird("Donald");
duck.hasOwnProperty("name"); // => true
hasOwnProperty
方法在Object.prototype
中定义
在这个prototype
原型链中,Bird
是duck
的supertype
,而duck
是subtype
,Object
是Bird
和duck
的supertype
。
Object
是JavaScript中所有对象的supertype
。因此,任何对象都可以使用hasOwnProperty
方法。
练习
修改代码以显示正确的原型链。
- 显示
Dog.prototype
是beagle
的prototype
。
function Dog(name) {
this.name = name;
}let beagle = new Dog("Snoopy");
Dog.prototype.isPrototypeOf(beagle);// => true
// Fix the code below so that it evaluates to true
???.isPrototypeOf(Dog.prototype);
答案
方法 | 描述 |
this | 当前执行代码的环境对象 |
let | 声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。 |
new | 创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 |
prototype | 给对象添加属性和方法。 |
isPrototypeOf() | 用于测试一个对象是否存在于另一个对象的原型链上。 |
hasOwnProperty() | 返回一个布尔,指示对象是否具有指定属性作为其自己的属性(而不是继承它)。 |
Object | 构造函数创建一个对象包装器。 |
function Dog(name) {
this.name = name;
}
let beagle = new Dog("Snoopy");
Dog.prototype.isPrototypeOf(beagle);// => true
// Fix the code below so that it evaluates to true
Object.prototype.isPrototypeOf(Dog);// => true