zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    flask 之定时任务开发
    locust 参数,数据详解
    ab返回结果参数分析
    ab使用命令
    django 实现同一个ip十分钟内只能注册一次(redis版本)
    django开发中利用 缓存文件 进行页面缓存
    django 实现登录时候输入密码错误5次锁定用户十分钟
    django 实现同一个ip十分钟内只能注册一次
    钉钉消息通知机器人python版
    用WMI监控IIS
  • 原文地址:https://www.cnblogs.com/develon/p/13297639.html
Copyright © 2011-2022 走看看