我们在调用构造函数时,会继承它的所有属性,比如一个Bird()

1
2
3
function Bird(name){
this.name = name;
}

我们创建了几个个对象来调用构造函数

1
2
3
4
var bird1 = new Bird("bird1");
var bird2 = new Bird("bird2");
var bird3 = new Bird("bird3");
var bird4 = new Bird("bird4");

然后,我们突然发现这些新建的对象都有一个共同的属性:它们的腿的数量都是2;

于是我们可以直接进行修改

1
2
3
bird1.numLegs = 2;
...
...

在数量少的时候,我们可以很轻松的修改,如果这个构造函数被调用了一百万次,那么我们如何修改?

在这里使用prototype函数进行修改

1
Bird.prototype.numLegs = 2;

这样的话,我们的构造函数就相当于:

1
2
3
4
function Bird(name){
this.name = name;
this.numLegs = 2; //直接在构造函数中添加了这个属性
}

当我们再次使用对象时就可以输出它的值

1
2
3
4
5
console.log(bird1.numLegs);	//输出2
console.log(bird2.numLegs); //输出2
console.log(bird3.numLegs); //输出2
console.log(bird4.numLegs); //输出2
...

可见,可以采用prototype方法来减少重复代码,这样可以很大程度避免低级错误。

每个对象都有自己的prototype属性,如果它是由构造函数创建而来的,那么它就是它的构造函数的一部分

评论