• js 原型链之我见


    前言

    • 原型链初步
      一个对象a会有一个__proto__属性指向另一个对象b, 当然, 如果这个对象b不为null, 那么它还会指向另一个对象c, 如此一来就形成了一条"原型链".
    a.__proto__ => b, b.__proto__ => Object.prototype, Object.prototype.__proto__ => null
    
    • 什么是__proto__呢?
      我们先来了解对象和函数.

    • 对象
      对象由new一个Function实例, 或者通过直接对象值({ field: value })来产生, 后者等价于直接new Object({...}).

    ({}).__proto__ === Object.prototype // true
    // 顺带一提, 对象还有一个构造器属性, 指向实例化该对象的Function对象, 因此有:
    obj.constructor.prototype === obj.__proto__ // true
    // 如此, 我们可将__proto__称为"构造器原型"
    
    • 函数
      函数是一种特殊对象, 每个函数都有一个名为prototype的对象属性, 当new这个函数时, 生产的新对象的__proto__属性将指向该对象,
      从而新对象继承了一个原型链.

    • 属性委托
      属性向上查找的一个过程.

    Code

    class B {
        constructor() {
            this.b = 'bbb';
        }
    }
    class A extends B {
        constructor() {
            super();
            this.a = 'aaa';
        }
    }
    let a = new A();
    console.log(a.__proto__ === A.prototype); // true
    console.log(a.__proto__.__proto__ === Object.prototype); // false
    console.log(a.__proto__.__proto__ === B.prototype); // true
    console.log(a.__proto__.__proto__.__proto__ === Object.prototype); // true
    let b = new B();
    console.log(b.__proto__ === B.prototype); // true
    console.log(b.__proto__.__proto__ === Object.prototype); // true
    

    END

  • 相关阅读:
    统计 (Standard IO)
    存储过程中的错误处理
    簡單SQL存儲過程實例
    SQLSERVER存储过程基本语法
    SQL Server游标的使用【转】
    实现业务系统中的用户权限管理--实现篇
    实现业务系统中的用户权限管理--设计篇
    C#.net 微信公众账号接口开发
    jquery select radio
    asp.net Repeater使用例子,包括分页
  • 原文地址:https://www.cnblogs.com/develon/p/13297639.html
Copyright © 2020-2023  润新知