美文网首页
原型对象与原型链

原型对象与原型链

作者: Doki_455c | 来源:发表于2019-06-18 15:55 被阅读0次

    所有的构造函数都有一个prototype对象,原型对象都包含一个指向构造函数的指针

    function Info () {
      
    }
    var obj = new Info()      // 所有的构造函数new出来的对象都包含一个指向原型对象的内部指针
    console.log(Info.prototype)  
    console.log(obj. __proto__)         //原型对象       对象.__proto__   输出结果一致
    // 在原型对象上创建的方法是共享的
    

    原型链

    function Info () {
    }
    Info.prototype.name = '张三'           //原型属性
    var a1 = new Info()
    console.log(a1.name)                 //张三
    console.log(a1 == Info.prototype)     //false
    

    a1和Info.prototype并不是同一个对象,为什么a1能够访问另一个对象的属性

    每个实例对象(new出来的)和原型(prototype)之间会有一个连接,__proto__(原型链)
    console.log(a1)输出结果是Info这个对象,对象里会有__proto__原型链会有name这个属性
    所以顺着原型链去查找会找到原型,如果原型有name这个属性可以访问到name
    function Info (name) {
      this.name = name                      //实例属性
    }
    Info.prototype.name = '张三'           //原型属性
    var a1 = new Info('李四')
    console.log(a1.name)                 //李四
    这里输出李四是构造函数的实例属性上可以找到这个属性,所以会先去实例上查找,如果实例没有才会去原型上找
    找到了返回,原型上没有才会去Object.prototype找。都找不到返回undefined
    

    实例对象和原型之间的连接 就叫做原型链

    相关文章

      网友评论

          本文标题:原型对象与原型链

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