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

    根据JavaScript核心以及原文JavaScript. The core.加上自己的理解做一个总结。

    原型链

    之前已经总结过了 js的__proto__,prototype、constructor属性,现在总结一下js中原型链。

    原型链是一个用来实现继承和共享属性的有限对象链

      当访问一个对象的某个属性和方法时,如果无法在对象自身中找到,则会循着原型属性__proto__的指向往原型对象上查找,如果在原型对象中还是没有找到,则会查找这个原型对象的原型,直到查找到Object.prototype,这就是原型链,是用来继承属性和共享属性。

        function Shape() {
            this.name='shape';
        }
        Shape.prototype.getName=function () {
            return this.name;
        };
        function twoDShape() {
            this.name='2D Shape';
        }
    
        //twoDShape.prototype的重新赋值
        twoDShape.prototype=new Shape();
        //手动纠正constructor的指向
        twoDShape.prototype.constructor=twoDShape;
        var myShape=new twoDShape();
        //原型链的查找
        myShape.getName();//2D Shape
        //删除twoDShape中的name属性
        delete myShape.name;
        myShape.getName();//shape
    

      这里将原有的twoDShape.prototype用Shape的实例对象覆盖,此时twoDShape.prototype就是一个实例化对象,自身不在拥有constructor属性,twoDShape.prototype.constructor是从__proto__的指向上查找到Shape.prototype.constructor指向Shape,故需要手动纠正constructor的指向。
      原型链的查找属于就近查找,即一级一级的往上查找,当找到后就立即返回,故第一个myShape.getName()返回的是2D Shape,这不意味着Shape中的name属性不存在,只是被屏蔽了,当删除twoDShape中的name属性后,第二个myShape.getName()返回的就是shape。

  • 相关阅读:
    C++ 类 析构函数
    Oracle 11g rac 添加新节点测试
    rac添加新节点的步骤与方法
    X 传输表空间方法留待整理
    1913: 成绩评估
    1066: 输入n个数和输出调整后的n个数
    1005: 渊子赛马
    Problem Y: 哪一天,哪一秒?
    Problem T: 结构体学生信息排序
    Problem O: 国家排序
  • 原文地址:https://www.cnblogs.com/aicanxxx/p/6845929.html
Copyright © 2011-2022 走看看