zoukankan      html  css  js  c++  java
  • 浅谈原型链

    今天想来聊聊js中的原型链

    在javascript中,实例对象在读取属性时,总是先检查自己有没有这个属性,如果有,则会直接返回这个属性,也叫私有属性,反之,则会检索prototype原型对象,如果找到同名属性,那么就返回prototype中的原型对象同名属性;如果prototype对象属性中没有,则会再往上一级查找,javascript会根据引用关系,直到找到最高一级object,若一直没有,那么就会返回undefined,说明没有此属性。

    下面来看一个案例:

     function a (x) {  //构造函数a
           this.x = x;
       }
       a.prototype.x = 0;  //原型属性x的值为0
       function b (x) {  //构造函数b
           this.x = x;
       }
       b.prototype = new a (1);  //原型对象为构造函数a的实例
       function c (x) {  //构造函数c
           this.x = x;
       }
       c.prototype = new b (2);  //原型对象为构造函数b的实例
       var d = new c (3);  //实例化构造函数c
       console.log(d.x); 

    此时打印出的结果时 3

     
     function a (x) {  //构造函数a
           this.x = x;
       }
       a.prototype.x = 0;  //原型属性x的值为0
       function b (x) {  //构造函数b
          this.x = x;
       }
       b.prototype = new a (1);  //原型对象为构造函数a的实例
       function c (x) {  //构造函数c
           //this.x = x; //若注释掉构造函数c的私有属性
       }
       c.prototype = new b (2);  //原型对象为构造函数b的实例
       var d = new c (3);  //实例化构造函数c
       console.log(d.x); 

    此时打印结果则为 2

     function a (x) {  //构造函数a
           this.x = x;
       }
       a.prototype.x = 0;  //原型属性x的值为0
       function b (x) {  //构造函数b
          // this.x = x; //若注释掉构造函数b的私有属性
       }
       b.prototype = new a (1);  //原型对象为构造函数a的实例
       function c (x) {  //构造函数c
           //this.x = x;  //同时再注释掉构造函数c的私有属性
       }
       c.prototype = new b (2);  //原型对象为构造函数b的实例
       var d = new c (3);  //实例化构造函数c
       console.log(d.x); 

    此时打印结果则为 1

     function a (x) {  //构造函数a
          // this.x = x; 
       }
       a.prototype.x = 0;  //原型属性x的值为0
       function b (x) {  //构造函数b
          // this.x = x;
       }
       b.prototype = new a (1);  //原型对象为构造函数a的实例
       function c (x) {  //构造函数c
           //this.x = x; 
       }
       c.prototype = new b (2);  //原型对象为构造函数b的实例
       var d = new c (3);  //实例化构造函数c
       console.log(d.x);  
    //以上构造函数 a,b,c 的私有属性都注释掉

    此时的结果就为 0

    这就是大致最简单的原型链的关系,原型链能够帮助用户更清楚的认识 JavaScript 面向对象的继承关系。

    当然JavaScript 能够根据原型链来查找对象之间的这种继承关系。

    以上图片时转自http://c.biancheng.net/view/5805.html

  • 相关阅读:
    IDEA 必要配置
    人工智能能力提升指导总结
    lerna管理前端packages的最佳实践
    【和60】软件即服务的三重境界
    项目章程
    阅读计划
    使用PHP处理文本小技巧
    PHP性能分析
    Ubuntu安装nodejs和yarn
    挖矿病毒
  • 原文地址:https://www.cnblogs.com/web001/p/14803456.html
Copyright © 2011-2022 走看看