zoukankan      html  css  js  c++  java
  • js重写原型对象

    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页,分别是:

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

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

  • 相关阅读:
    bzoj 3456 城市规划 —— 分治FFT / 多项式求逆 / 指数型生成函数(多项式求ln)
    洛谷 P4721 [模板]分治FFT —— 分治FFT / 多项式求逆
    CF 438 E & bzoj 3625 小朋友和二叉树 —— 多项式开方
    Codeforces 447
    Codeforces 1099
    Codeforces 991
    Codeforces 994
    Codeforces 989
    Codeforces 1084
    xj膜你赛(n-1)
  • 原文地址:https://www.cnblogs.com/aixiuxiu/p/6505825.html
Copyright © 2011-2022 走看看