重写原型对象

来源:互联网 发布:lambda表达式java 编辑:程序博客网 时间:2024/06/11 14:31
重写整个原型对象会产生一些问题:
没有重写原型对象时: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();   // Hijerry.sayHi(); // Hello//jerry的原型是默认初始的原型//而tom的原型是重写后的原型//重写原型对象之后,会切断构造函数与最初原型之间的连接,使接下来构造出来的实例对象的原型指向重写的原型.而已经创建过的对象的原型还是最初的原型,所以Jerry的原型还是初始原型,而tom的原型是重写后的原型.
原创粉丝点击