• JavaScript:理解prototype与__proto__,原型与原型链


    JS中的继承是原型继承,通过原型实现的。为了理解原型,我想先讲讲对象的内部属性[[prototype]]和属性__proto__,函数的属性prototype。

    对象的内部属性[[prototype]]和属性__proto__

    每个对象都有内部属性[[prototype]]和属性__proto__,一个对象的__proto__ 属性和自己的内部属性[[Prototype]]指向一个相同的值 (通常称这个值为原型),原型的值可以是一个对象值也可以是null(比如说Object.prototype.__proto__的值就是null)。该属性可能会引发一些错误,因为用户可能会不知道该属性的特殊性,而给它赋值,从而改变了这个对象的原型。如果需要访问一个对象的原型,应该使用方法Object.getPrototypeOf。

    改变__proto__ 属性的值同时也会改变内部属性[[Prototype]]的值,除非该对象是不可扩展的。proto 属性就相当于内部属性[[Prototype]]的可访问版,它们在内容上是等价的,都代表着对象的原型。为了语言简洁,我们接下来说到对象原型,只用__proto__属性来说。

    函数的属性prototype###

    每个函数都有属性prototype,函数的属性prototype是一个原型对象,这个原型对象里有一个constructor属性指向这个函数本身,还可以有其他自定义的属性。

    同时,因为函数也是对象,所以每个函数也都有内部属性[[prototype]]和属性__proto__。

    函数的属性__proto__,就是函数本身这个对象的原型,而属性prototype是,在函数作为构造函数时,赋值给实例对象的属性__proto__,也就是由函数所构造的实例对象的原型。

    原型链的形成###

    一个对象的原型可以是构造函数的prototype隐式赋值给该对象的属性__proto__的,可以是将其他对象直接显示赋值给该对象的属性__proto__的,不管是怎么生成的,对象的原型也是一个对象,而这个原型对象也有它的__proto__属性。当对象寻找一个属性时,先找本身的属性里有没有,没有的话,再在其属性__proto__的原型对象中找,原型对象中没有,再在它的原型对象中找,一环接一环,这就是原型链。

  • 相关阅读:
    (原创)TWR MCF51CN 总线时钟控制和串口测试程序编写
    (原创)360 与 sopc builder 不兼容
    (原创)一步一步学ZedBoard & Zynq(三):使用自带外设IP让ARM PS访问FPGA
    (原创)一步一步学ZedBoard & Zynq(二):使用PL做流水灯
    (原创)一步一步学ZedBoard & Zynq(一):ZedBoard的第一个工程Helloworld
    (原创)由XPS生成AXI Lite 从设备IP模板我们能学到的东西
    [转] 开源硬件时代的挑战和新的机遇
    [转]FPGA工程师:持守梦想or屈于现实
    (原创)K60 的 I2S音频接口设计
    (原创)NIOS中断编程
  • 原文地址:https://www.cnblogs.com/amy-fox/p/5866849.html
Copyright © 2020-2023  润新知