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

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

function Person(){}

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

----------------------------------------------------------

function Person(){}

var friend2 = new Person(); //实例在这里

Person.prototype = {
        constructor:Person,
        name:"Nic",
        age:"29",
        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/aixiuxiu/p/6505825.html

你可能感兴趣的文章
如何使用Core Text计算一段文本绘制在屏幕上之后的高度
查看>>
==和equals区别
查看>>
2010技术应用计划
查看>>
XML 节点类型
查看>>
驯服 Tiger: 并发集合 超越 Map、Collection、List 和 Set
查看>>
Winform开发框架之权限管理系统改进的经验总结(3)-系统登录黑白名单的实现...
查看>>
Template Method Design Pattern in Java
查看>>
MVC输出字符串常用四个方式
查看>>
LeetCode – LRU Cache (Java)
查看>>
JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)...
查看>>
【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2
查看>>
在 ASP.NET MVC 中使用异步控制器
查看>>
SQL语句的执行过程
查看>>
Silverlight开发历程—动画(线性动画)
查看>>
详解Linux中Load average负载
查看>>
HTTP 协议 Cache-Control 头——性能啊~~~
查看>>
PHP遍历文件夹及子文件夹所有文件
查看>>
WinForm程序中两份mdf文件问题的解决
查看>>
程序计数器、反汇编工具
查看>>
Android N: jack server failed
查看>>