function Person(){} var person = new Person(); Person.prototype={//重写Person原型 name:'zhangsan', sayHi:function(){ alert("重写原型") } } //person.sayHi();这里会报错 function Person1(){} var person1 = new Person1(); Person1.prototype.sayHi = function(){ alert("hello prototype") } person1.sayHi();//这里能正常执行
由于javascript本身的原型和实例之间松散关系,在Person对象中先实例化了对象,接着重写了Person的原型,就是因为这里的重写导致了现有的原型和之前实例对象之间关系被切断,而Person1则不一样,没有对原型进行重写,而只是在Person1原型上添加的方法和属性,所有区别就在此,所以Person1.sayHi()的执行显然没问题