• 浅谈原型链


    今天想来聊聊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

  • 相关阅读:
    python pycurl属性
    HTTP报文-->MVC
    国际化信息-->MVC
    计算机网络入门概念理解
    TCP/IP基础概念及通信过程举例
    一道面试题:说说进程和线程的区别
    【转载】我眼中的Oracle性能优化
    【转载】数据库范式那些事
    【转载】详解CreateProcess调用内核创建进程的过程
    数据结构和算法(一):hash散列容器
  • 原文地址:https://www.cnblogs.com/web001/p/14803456.html
Copyright © 2020-2023  润新知