成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

原型模式故事鏈--new一個(gè)對(duì)象的過(guò)程

edgardeng / 1944人閱讀

摘要:設(shè)置新的對(duì)象的隱式原型指向其構(gòu)造函數(shù)的顯式原型執(zhí)行構(gòu)造函數(shù)代碼,指向這個(gè)新的對(duì)象。驗(yàn)證一下步驟和構(gòu)造函數(shù)原型由上面可以看出,沒(méi)有實(shí)例化時(shí)沒(méi)有時(shí),指向的是那么來(lái)看看后是否會(huì)指向這個(gè)新對(duì)象。

上一個(gè)總標(biāo)題:https://segmentfault.com/a/11...
提問(wèn):你有對(duì)象了嗎?
:沒(méi)有。
笨!new一個(gè)不就好了嗎!

問(wèn)題點(diǎn):為什么我要理解new一個(gè)對(duì)象的過(guò)程?
答:不理解這個(gè)過(guò)程,你就不知道為什么只是new了一下,這個(gè)實(shí)例就能使用原型的各種方法。

new一個(gè)對(duì)象的過(guò)程:需要經(jīng)歷4個(gè)步驟,結(jié)合上一章原型模式為例。
var cat = new Animal("橘貓");

1.創(chuàng)建一個(gè)新的空對(duì)象。
var cat = {}

2.設(shè)置新的對(duì)象的隱式原型指向其構(gòu)造函數(shù)的顯式原型
cat._proto_ = Animal.protype

3.執(zhí)行構(gòu)造函數(shù)代碼,this指向這個(gè)新的對(duì)象。
Animal.call(cat)

4.返回該對(duì)象(返回this)
var cat = new Animal();
(把返回的對(duì)象保存到變量cat中,所以這個(gè)cat就是這個(gè)對(duì)象的實(shí)例,所以cat本身也是一個(gè)對(duì)象)

好啦,你有一個(gè)對(duì)象了。你脫單了。
如果還是比較難以理解那我通俗點(diǎn)的講:
原先的代碼長(zhǎng)這個(gè)樣子。

    //構(gòu)造函數(shù)
    function Animal(name){
        this.name = name;
        //為什么在原型里的方法放到構(gòu)造函數(shù)里呢,因?yàn)?.設(shè)置新的對(duì)象的隱式原型指向其構(gòu)造函數(shù)的顯式原型
        this.eat = function(val){
            console.log(this.name + " like eat "+ val);
        }
    }

使用了new操作符后就變成了這樣。

    //構(gòu)造函數(shù)
    function Animal(name){
        //1.創(chuàng)建一個(gè)空的對(duì)象(為了方便理解我們讓這個(gè)對(duì)象就叫this)
        var this = {};
        
        //3.執(zhí)行構(gòu)造函數(shù)代碼,往this里添加屬性和方法。
        this.name = name;
        this.eat = function(val){
            console.log(this.name + " like eat "+ val);
        }
        
        //4.返回該對(duì)象(返回this)
        return this;
    }

所以當(dāng)我們 var cat = new Animal("橘貓");
就相當(dāng)于 var cat = this; //this里面的方法屬性cat都可以用。

驗(yàn)證:我們?nèi)ヲ?yàn)證一下,是否做了以上這幾件事。
驗(yàn)證步驟2:
在控制臺(tái)輸出一下日志:

由上圖可以看到,cat._proto_和 Animal.protype是完全相等的。說(shuō)明2成立。

驗(yàn)證一下步驟3和4:

//構(gòu)造函數(shù)
    function Animal(name){
        this.name = name;
        console.log("this:",this)
    }
    
    // 原型
    Animal.prototype = {
        eat:function(val){
            console.log(this.name + " like eat "+ val);
        }
    }
    
    Animal();//window

由上面可以看出,沒(méi)有實(shí)例化時(shí)(沒(méi)有new時(shí)),this指向的是window.
那么來(lái)看看new后this是否會(huì)指向這個(gè)新對(duì)象。

//構(gòu)造函數(shù)
    function Animal(name){
        this.name = name;
        console.log("this:",this)
    }
    
    // 原型
    Animal.prototype = {
        eat:function(val){
            console.log(this.name + " like eat "+ val);
        }
    }

    // 實(shí)例化
    var cat = new Animal("橘貓");

    console.log("cat就是:",cat)

控制臺(tái)輸出日志如下:

兩者完全相同,由此我們可以驗(yàn)證步驟3和4成立。執(zhí)行了構(gòu)造函數(shù)且this指向這個(gè)新對(duì)象。

問(wèn)題:隱式原型和顯式原型是什么?為什么cat能調(diào)用顯式原型里的東西?
下一回:原型鏈 https://segmentfault.com/a/11...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98625.html

相關(guān)文章

  • 原型模式故事(2)--原型四大理論

    摘要:所有引用類(lèi)型的隱式原型指向它構(gòu)造函數(shù)的顯式原型。理論就不驗(yàn)證了,寫(xiě)原型模式時(shí)。原型模式構(gòu)造函數(shù)原型實(shí)例化橘貓魚(yú)呀魚(yú)橘貓魚(yú)呀魚(yú)在上述代碼中,在之后就相當(dāng)于這個(gè)函數(shù)。 上一章:new一個(gè)對(duì)象的過(guò)程 https://segmentfault.com/a/11... 原型鏈4大理論:1.所有的引用類(lèi)型都有一個(gè)_proto_屬性,稱(chēng)之為隱式原型。 2.所有的函數(shù)(Function)都有一個(gè)pro...

    MRZYD 評(píng)論0 收藏0
  • 原型模式故事(2)--原型四大理論

    摘要:所有引用類(lèi)型的隱式原型指向它構(gòu)造函數(shù)的顯式原型。理論就不驗(yàn)證了,寫(xiě)原型模式時(shí)。原型模式構(gòu)造函數(shù)原型實(shí)例化橘貓魚(yú)呀魚(yú)橘貓魚(yú)呀魚(yú)在上述代碼中,在之后就相當(dāng)于這個(gè)函數(shù)。 上一章:new一個(gè)對(duì)象的過(guò)程 https://segmentfault.com/a/11... 原型鏈4大理論:1.所有的引用類(lèi)型都有一個(gè)_proto_屬性,稱(chēng)之為隱式原型。 2.所有的函數(shù)(Function)都有一個(gè)pro...

    Meils 評(píng)論0 收藏0
  • 原型模式故事(2)--原型四大理論

    摘要:所有引用類(lèi)型的隱式原型指向它構(gòu)造函數(shù)的顯式原型。理論就不驗(yàn)證了,寫(xiě)原型模式時(shí)。原型模式構(gòu)造函數(shù)原型實(shí)例化橘貓魚(yú)呀魚(yú)橘貓魚(yú)呀魚(yú)在上述代碼中,在之后就相當(dāng)于這個(gè)函數(shù)。 上一章:new一個(gè)對(duì)象的過(guò)程 https://segmentfault.com/a/11... 原型鏈4大理論:1.所有的引用類(lèi)型都有一個(gè)_proto_屬性,稱(chēng)之為隱式原型。 2.所有的函數(shù)(Function)都有一個(gè)pro...

    MarvinZhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<