博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js重写原型对象
阅读量:5288 次
发布时间:2019-06-14

本文共 894 字,大约阅读时间需要 2 分钟。

首先看两段很相似的代码:

1.

function Person(){}        Person.prototype = {        constructor:Person,        name:"Nic",        age:"29",        sayName:function(){            alert(this.name)        }    };    var friend1 = new Person();    //实例在这里        friend1.sayName();

2.

function Person(){}    var friend2 = new Person();    //实例在这里    Person.prototype = {        name : "aty",        sayName:function(){            alert(this.name);        }    };    friend2.sayName();

两个例子都是重写了原型对象,但是实例创建的顺序直接导致了俩个输出的结果。

第一个弹出 “Nic”,而第二个会报错TypeError: friend2.sayName is not a function” !!!

两端代码唯一的区别就是实例在原型对象重写之前还是之后。

第一段重写后再创建实例,此时实例指向改写后的原型对象,所以能调用到原型中的sayName()。

第二段创建实例后再重写,此时实例还是指向刚开始的原型对象。重写原型对象后会将 之前原型对象 的属性和方法全部清除,所以实例访问不到sayName()。

 

另外读《JavaScript高级程序设计(第3版)》中156页与157页,分别是:

“实例中的指针仅指向原型,而不是指向构造函数”。

“重写原型对象切断了现有原型与任何之前已经存在的对象实例之间的关系;它们引用的仍然是最初的原型”。

 

转载于:https://www.cnblogs.com/hcy1996/p/5907041.html

你可能感兴趣的文章
git clone 报错 fatal: remote did not send all necessary objects
查看>>
JDK1.8源码之HashMap(一)——实现原理、查找及遍历
查看>>
Schema技术的使用小结.
查看>>
《深入浅出MFC》第八章 Document-View深入探讨
查看>>
DES算法
查看>>
HTTP报文详解
查看>>
raid 0 1 5 10 总结的知识点
查看>>
3D屏保:排色榜
查看>>
找出最长的有效括号内子括号的长度
查看>>
c语言条件表达式误区1
查看>>
linux中vfork对打开文件的处理
查看>>
数据类型
查看>>
【选择器】
查看>>
爬虫-数据解析
查看>>
201621123080《Java程序设计》第9周学习总结
查看>>
ThinkPHP实现定时任务
查看>>
MongoDB修改器和pymongo
查看>>
Selenium 学习总结
查看>>
[Python]猜数字游戏AI版的实现(幼儿园智商AI)
查看>>
HDOJ 1047 Integer Inquiry (大数)
查看>>