美文网首页
js的原型和原型链

js的原型和原型链

作者: 沉默紀哖呮肯伱酔 | 来源:发表于2020-06-02 10:26 被阅读0次

    每个函数都有prototype属性。
    每一个对象都有一个proto属性,该属性指向其对象的原型。

    function Person() {}
    var person = new Person();
    // person.__proto__ === Person.prototype
    

    原型链:

    // 构造函数
    function Person(){
    }
    Person.__proto__ === Function.prototype
    Function.prototype.__proto__ === Object.prototype
    Object.prototype.__proto__ === null
    
    Perosn.prototype__proto__ === Object.prototype
    Obejct.prototype.__proto__ === null
    

    Person的proto指向其原型对象,其原型对象的proto又指向它的原型对象,就这样一直向上找,直到指向最顶层的null

    // 例题
    Function.prototype.a = "1";
    Object.prototype.b = "2";
    function Person(){}
    
    let p = new Person();
    
    console.log(p.a) // undefined
    console.log(p.b) // 2
    

    这道题很容易迷惑人,我们首先会像到明明设置了a属性,为什么打印出来的a是undefined。为什么会出现这样的结果呢?
    因为Function.prototype.a = "1"; 这个语句是为Function设置的属性a。p是Person的实例, p是一个对象不是函数,所以没有a属性

    相关文章

      网友评论

          本文标题:js的原型和原型链

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