javascript原形和原形链

作者: 我不叫奇奇 | 来源:发表于2017-02-25 21:26 被阅读109次

    一、函数对象和普通对象

    javascript中,一切皆是对象,分为函数对象和普通对象。下面举一个简单的例子。

    function f(){
      console.log("我是函数")
    };
    var o={data:"我是普通对象"};//普通对象
    var f1= new f();//函数对象
    var f2=new function(){};//函数对象
    

    其中,o是普通对象,f1是函数对象,即我们通常所说本身等于对象或者调用函数的值为函数对象,本身等于对象的为普通对象。

    二、原形对象

    下面我们把目光聚焦刀函数对象,所有函数对象在创建时都会有很多默认属性,其中有一个prototype属性,这就是我们所说的原形对象注意:普通对象没有原形对象,但是有____proto__ __属性。函数对象也有____proto__ __属性。
    所有东西存在都是有着自己本身的意义,prototype存在的意义就是用于继承,举个例子。

    function f(){
      console.log("我是函数")
    };
    f.prototype.common="共有属性";
    var f1= new f();
    var f2= new f();
    console.log(f1.common);//"共有属性"
    console.log(f2.common);//"共有属性"
    

    函数f的共有属性是 common:"共有属性",所以它所有的"孩子"全部拥有这个属性。

    思考:

    function f(){
      console.log("我是函数")
    };
    f.prototype.common=100;
    var f1= new f();
    var f2= new f();
    f2.common-=20;
    console.log(f1.common);//?
    console.log(f2.common);//?
    f.prototype.common-=30;
    console.log(f1.common);//?
    console.log(f2.common);//?
    
    f2.common-=20;
    console.log(f1.common);//100
    console.log(f2.common);//80
    f.prototype.common-=30;
    console.log(f1.common);//70
    console.log(f2.common);//80
    你答对了吗?
    

    三、原形链

    所有对象的____proto__ __属性都指向它父亲的prototype属性。

    function f(){
      console.log("我是函数")
    };
    f.prototype.common="共有属性";
    var f1= new f();
    console.log(f1.__proto__);//f.prototype(object{common:"共有属性",等一项})
    console.log(f1.__proto__===f.prototype);//true;
    

    这就是为什么自己能用父亲的属性,因为自己有一个____proto__ __属性,自己的属性自己当然能用。

    玩一个有意思的找爸爸的游戏

    function f(){
      console.log("我是函数")
    };
    var f1= new f();
    console.log(f.__proto__);//function()--所有函数名的爸爸都是function;
    console.log(f1.__proto__);//f1.prototype;
    console.log(f1.__proto__.__proto__===f.__proto__.__proto__);//true
    console.log(f1.__proto__.__proto__);//object
    console.log(f1.__proto__.__proto__.__proto__);//null
    

    四、总结

    记得在网上看到一个大神的解释很有意思。

    原形链

    爸爸给哥哥买了很多玩具,这些玩具你也可以使用,之后你生了儿子,你给你儿子买了很多玩具,同时,你哥哥的玩具你也可以给你儿子玩。

    相关文章

      网友评论

        本文标题:javascript原形和原形链

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