JavaScript原型链

作者: 许吉中 | 来源:发表于2017-11-06 12:14 被阅读23次

    js中的继承是基于原型链来实现的,被实例化对象的__proto__属性指向了继承的对象

    function Fn(){
        this.name = "许吉中"
    }
    
    Fn.prototype.birthday = "1993"
    
    var foo_a = new Fn()
    
    console.log(foo_a.birthday)   //1993
    
    

    这段代码中,foo_a.__proto__就指向了Fn的prototype属性,在Fn的prototype属性添加属性,foo_a可以直接继承过来

    foo_a.__proto__ === Fn.prototype
    //true
    

    而所有的Fn.prototype的__proto__都会指向Object.prototype,这里所说的Fn为function对象,而非function new出来的实例化对象,这也是为什么说Object是每一个对象的父类,每一个对象都可以使用Object中的方法

    Fn.prototype.__proto__ === Object.prototype
    //true
    

    Object.prototype的__proto__指向null

    Object.prototype.__proto__ === null
    //true
    

    要特殊注意的是Function对象,注意F是大写的,所有的function对象都是Function创造出来的

    var fn1 = new Function("a","b","return a + b")
    console.log(fn1("x","jz"))
    //"xjz"
    

    如果说function的实例化对象的__proto__都指向了function对象的prototype属性,那么function对象本身的__proto__都指向了Function.prototype(Function也是一个函数对象,也有__proto__属性。既然是函数,那么它一定是被Function创建。所以Function是被自身创建的。所以它的__proto__指向了自身的Prototype。)

    Object.__proto__ === Function.prototype
    //true
    

    终极原型链图示


    原型链

    相关文章

      网友评论

        本文标题:JavaScript原型链

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