关于原型链

原型链

        + 只要是 数组数据类型, 所属构造函数就是 Array

        + 只要是 函数数据类型, 所属构造函数就是 Function

        + 只要是 正则数据类型, 所属构造函数就是 RegExp

        + 只要是 对象数据类型, 所属构造函数就是 Object

        + 原型链: 对象的 __proto__ 串联起来的对象链状结构

        + 目的: 对象访问机制

          => 当你访问一个对象成员的时候, 首先在自己身上查找, 如果有, 直接使用, 停止查找

          => 如果没有, 会自动去到自己的 __proto__ 查找, 如果有直接使用, 停止查找

          => 如果还没有, 就再去 __proto__ 上查找, 如果有直接使用, 停止查找

          => 以此类推, 直到 Object.prototype 都没有的时候, 返回 undefined

      问题1: p 的 __proto__ 指向谁 ?

        => 对象的 __proto__ 指向所属构造函数的 prototype

        => 因为 p 的所属构造函数是 Person

        => p.__proto__ === Person.prototype

      问题2: Person.prototype 是一个对象, __proto__ 指向谁 ?

        => Person.prototype 是一个对象数据类型

        => 它多数的构造函数就是 Object

        => Person.prototype.__proto__ === Object.prototype

      问题3: Person 是函数的同时也是一个对象, __proto__ 指向谁 ?

        => Person 是一个函数数据类型

        => 它所属的构造函数就是 Function

        => Person.__proto__ === Function.prototype

      问题4: Object.prototype 是一个对象, __proto__ 指向谁 ?

        => Object.prototype.__proto__ 指向 null

        => 因为我们管 Object.prototype 叫做顶级原型

      问题5: Object 是函数的同时也是一个对象, __proto__ 指向谁 ?

        => Object 是一个内置构造函数, 也是一个构造函数, 也是一个函数  

        => 只要是函数, 所属的构造函数就是 Function  

        => Object 所属的构造函数就是 Function    

        => Object.__proto__ === Function.prototype

      问题6: Function.prototype 是一个对象, __proto__ 指向谁 ?

        => Function.prototype 是一个对象数据类型

        => 它所属的构造函数就是 Object

        => Function.prototype.__proto__ === Object.prototype

      问题7: Function 是函数的同时也是一个对象, __proto__ 指向谁 ?

        => Function 是一个内置构造函数, 也是一个构造函数, 也是一个函数

        => 只要是函数, 所属的构造函数就是 Function

        => Function 自己是自己的实例, 自己是自己的构造函数

        => 我们管 Function 叫做顶级函数

        => Function.__proto__ === Function.prototype

    */

    function Person() {

      this.name = 'Jack'

      this.age = 18

      this.gender = '男'

    }

    Person.prototype.sayHi = function () {}

    const p = new Person()


 

    console.log(p.__proto__ === Person.prototype)  

    console.log(Person.prototype.__proto__ === Object.prototype)

    console.log(Person.__proto__ === Function.prototype)

    console.log(Object.prototype.__proto__ === null)

    console.log(Object.__proto__ === Function.prototype)

    console.log(Function.prototype.__proto__ === Object.prototype)

    console.log(Function.__proto__ === Function.prototype)

以上打印结果均为true

详细图解:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值