美文网首页
JavaScript 原型和原型链

JavaScript 原型和原型链

作者: 饥人谷_风争 | 来源:发表于2017-12-10 22:28 被阅读0次

    原型

    在 JavaScript 中,我们所称的原型有两个使用语境:

    • 原型关系
    • 原型属性

    原型关系指对象的原型对象,且该对象会继承原型对象的所有属性。
    原型属性指函数(函数本质上也是对象)的原型属性(.prototype)。

    原型关系

    每一个对象都有自己的原型对象(Object除外),对象会继承原型对象的所有属性。
    在浏览器的控制台中,可以使用 .__proto__来查看一个对象的原型对象。

    let obj = {}
    console.dir(obj.__proto__)
    
    console.dir(obj.__proto__)打印出的原型对象
    只要是对象(Object除外),就一定拥有一个.__proto__属性,指向该对象的原型对象。
    一般情况下,对象都是由构造函数构造出来的,该对象的.__proto__指向该构造函数的.prototype属性。

    let obj = new Number(1)
    obj.__proto__ === Number.prototype
    对象.__proto__ === 函数.prototype

    一般的对象还有一个.constructor属性指向该对象的构造函数。

    原型属性

    每一个函数都会有一个原型属性(.prototype),该原型属性指向该函数构造的对象的原型对象(.__proto__)。
    同样可以用控制台打出来

    let num = new Number(1)
    num.__proto__ === Number.prototype  // true
    console.dir(Number.prototype)
    
    Number.prototype

    原型链

    原型链描述对象之间互相引用的关系。
    获取一个对象的属性时,JavaScript引擎先从对象自身查找,如果没找到,就到这个对象的原型对象上查找,还没有找到就再继续到原型对象上查找,直到查找到这个属性或者原型链的终点。
    所有原型链的最后一个原型对象都是 Object.prototype,Object.prototype的原型是 null

    let array = new Array(1,2)
    console.log(array)
    array.__proto__ === Array.prototype                       // true
    Array.prototype.__proto__ === Object.prototype    // true
    Object.prototype.__proto__ === null                      // true
    
    原型链示例

    相关文章

      网友评论

          本文标题:JavaScript 原型和原型链

          本文链接:https://www.haomeiwen.com/subject/dwwvixtx.html