重写整个原型对象会产生一些问题:
没有重写原型对象时:
function Person(name){
this.name = name;
}
Person.prototype.sayHi = function(){
alert("Hi");
}
console.log(Person.prototype);
下面是打印的结果:
重写整个原型时:
function Person(name){
this.name = name;
}
Person.prototype = {
sayHi: function(){
alert("Hi");
}
}
console.log(Person.prototype);
下面是打印结果:
可以看出,重写了原型对象之后,其constructor不再指向构造函数本身。
在看个例子:
function Person(name){
this.name = name;
}
Person.prototype.sayHi = function(){
alert("Hello");
}
var jerry = new Person("JERRY");
Person.prototype = {
sayHi: function(){
alert("Hi");
}
}
var tom = new Person("TOM");
tom.sayHi(); // Hi
jerry.sayHi(); // Hello
//jerry的原型是默认初始的原型
//而tom的原型是重写后的原型
//重写原型对象之后,会切断构造函数与最初原型之间的连接,使接下来构造出来的实例对象的原型指向重写的原型.而已经创建过的对象的原型还是最初的原型,所以Jerry的原型还是初始原型,而tom的原型是重写后的原型.