说明
由于numLegs
对于Bird
的所有实例可能具有相同的值,因此在每个Bird
实例中基本上都有一个重复的变量numLegs
。
在只有两个实例时,这可能不是问题。但想象如果有数百万个实例,那将是很多重复的变量。
一个更好的方法是使用Bird
的prototype
。prototype
是在Bird
的所有实例之间共享的对象。以下是将numLegs
添加到Bird
的prototype
的方法:
Bird.prototype.numLegs = 2;
现在,所有Bird
的实例都有numLegs
属性。
console.log(duck.numLegs); // prints 2
console.log(canary.numLegs); // prints 2
由于所有实例都自动在prototype
上有属性,因此将prototype
视为创建对象的“配方”。
请注意,duck
和canary
的prototype
是Bird
构造函数的一部分,例如Bird.prototype
。 JavaScript中几乎每个对象都有一个prototype
属性,它是创建它的构造函数的一部分。
练习
将numLegs
属性添加到Dog
的prototype
。
beagle
应该有一个numLegs
属性。beagle.numLegs
应该是一个数字。numLegs
应该是一个prototype
属性不是own
的属性。
答案
方法 | 描述 |
this | 当前执行代码的环境对象 |
new | 创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 |
let | 声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。 |
prototype | 向对象添加属性和方法。 |
console.log() | 用于在控制台输出信息(浏览器按下 F12 打开控制台)。 |
function Dog(name){
this.name=name;
}
let beagle=new Dog;
Dog.prototype.numLegs = 4;
console.log(beagle.numLegs);
运行结果