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

資訊專(zhuān)欄INFORMATION COLUMN

你們真的理解prototype和__proto__嘛?

makeFoxPlay / 2428人閱讀

摘要:我們知道創(chuàng)建了一個(gè)函數(shù)就帶了一個(gè)屬性,創(chuàng)建一個(gè)實(shí)例就帶著一個(gè)指針,這個(gè)指針是實(shí)例和構(gòu)造函數(shù)的原型對(duì)象間的聯(lián)系,這個(gè)指針在腳本中是不可見(jiàn)的,也就是你不能訪(fǎng)問(wèn)的,但是在和中,提供了來(lái)支持訪(fǎng)問(wèn),這么一說(shuō),相信大家應(yīng)該能明白吧

前言

一般我們看到prototype就會(huì)下意識(shí)的說(shuō)這不就是原型對(duì)象嘛?但是你們真的了解prototype嘛?就當(dāng)你們很了解了,畢竟是基礎(chǔ)知識(shí),我就簡(jiǎn)單說(shuō)說(shuō)

正文

先說(shuō)說(shuō)工廠(chǎng)模式的由來(lái)吧,創(chuàng)建對(duì)象我們通常可以用new Object()或者直接對(duì)象字面量{}創(chuàng)建,但是要是對(duì)象之間又有其他共用的代碼塊又將如何呢?不錯(cuò),這會(huì)造成大量的代碼冗余,因?yàn)樵贘S的世界里沒(méi)有接口的概念(ES5之前),我們平時(shí)在JS所說(shuō)的類(lèi)也并非實(shí)際意義上的類(lèi),很多類(lèi)的特性JS都沒(méi)有,我一般就把JS的類(lèi)稱(chēng)為一個(gè)"另類(lèi)",雖然ES6有了所謂的接口,但是萬(wàn)變不離其宗。扯得有點(diǎn)遠(yuǎn)啊,既然普通創(chuàng)建對(duì)象會(huì)造成冗余,那怎么避免呢?起初用的是工廠(chǎng)模式,如demo1所示:

demo1
function demo1 () {
    this.name = "mirok",
    this.show = show
}
function demo2 () {
    this.name = "july",
    this.show = show
}
function show () {
    console.log(this.name)
}
var name = "global"
new demo1().show() //mirok
new demo2().show() // july
show() //global

雖然demo1解決了問(wèn)題,但是這樣寫(xiě)沒(méi)有任何封裝而言, show函數(shù)并不是引用類(lèi)型特定能訪(fǎng)問(wèn)的,如demo1輸出了global一樣,為了解決此類(lèi)問(wèn)題,便有了原型模式,也就是你們經(jīng)常用的prototype

demo2
function Demo2 () {
}
Demo2.prototype.show = function() {
    console.log(this.name)
}
var obj1 = new Demo2()
var obj2 = new Demo2()
obj1.name = "mirok"
obj2.name = "july"
obj1.show() //mirok
obj2.show() // july

網(wǎng)上有很多解釋了__proto__和prototype的區(qū)別,還各自寫(xiě)了例子,雖然說(shuō)了很多,也是解釋得不清不楚。我們知道創(chuàng)建了一個(gè)函數(shù)就帶了一個(gè)prototype屬性,創(chuàng)建一個(gè)實(shí)例就帶著一個(gè)[[prototype]]指針,這個(gè)指針是實(shí)例和構(gòu)造函數(shù)的原型對(duì)象間的聯(lián)系,這個(gè)指針在腳本中是不可見(jiàn)的,也就是你不能訪(fǎng)問(wèn)的,但是在Firefox、Safari 和 Chrome中,提供了__proto__來(lái)支持訪(fǎng)問(wèn),這么一說(shuō),相信大家應(yīng)該能明白吧

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

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

相關(guān)文章

  • 你們真的了解JS的繼承?

    摘要:這又是什么呢這個(gè)相對(duì)之前的比較復(fù)雜,但是高效的一點(diǎn)是只調(diào)用一次被繼承者構(gòu)造函數(shù)原理就是通過(guò)寄生方式創(chuàng)建一個(gè)被繼承者的副本,副本和被繼承者共用一個(gè)這樣就解決了之前的問(wèn)題返回的一個(gè)副本設(shè)置指向因?yàn)樾赂北镜脑蛯?duì)象被重寫(xiě)副本作為的原型對(duì)象 前言 我們學(xué)JAVA的時(shí)候說(shuō)到繼承就是一個(gè)extends ClassName的事情,但是在JS的世界里繼承和我們?cè)贘AVA所認(rèn)識(shí)的繼承實(shí)現(xiàn)方法又有一些不同...

    ssshooter 評(píng)論0 收藏0
  • 為啥我要自己實(shí)現(xiàn)一個(gè)new語(yǔ)法糖?

    摘要:為啥我要自己實(shí)現(xiàn)一個(gè)語(yǔ)法糖為什么要自己實(shí)現(xiàn)一個(gè)語(yǔ)法糖呢因?yàn)橹皩?duì)于里的語(yǔ)法糖一直是理論理解但是并親自嘗試實(shí)現(xiàn)過(guò)。直到有一天在頭條的面試中我聊了摸著自己的良心說(shuō)我可以實(shí)現(xiàn)一個(gè)語(yǔ)法糖面試官嗯那你實(shí)現(xiàn)一個(gè)吧。我們知道構(gòu)造函數(shù)一般是不寫(xiě)的。 為啥我要自己實(shí)現(xiàn)一個(gè)new語(yǔ)法糖? 為什么要自己實(shí)現(xiàn)一個(gè)new語(yǔ)法糖呢? 因?yàn)橹皩?duì)于JS里的new語(yǔ)法糖一直是理論理解,但是并親自嘗試實(shí)現(xiàn)過(guò)。 直到有一...

    andycall 評(píng)論0 收藏0
  • [JS相關(guān)的記錄01] 那什么來(lái)面對(duì)你,面向?qū)ο缶幊?__proto__,prototype,con

    摘要:首先定義空函數(shù)這個(gè)不用解釋?zhuān)缓蟀堰@個(gè)空函數(shù)的原型指向?yàn)榈脑?,然后再把的原型指向這個(gè)新的對(duì)象,一個(gè)完美傳遞最后,在把原型的構(gòu)造方法定義成華麗的轉(zhuǎn)身,結(jié)果如下結(jié)果還是不對(duì),于是我又在大神的肩膀上墊了一下腳。 總是聽(tīng)說(shuō)面向?qū)ο?,?lèi),繼承,__proto__,prototype,constructor.......于是乎小整理一下。 首先說(shuō),JS里的繼承是怎么弄的呢? 首先創(chuàng)建類(lèi)(Pers...

    raledong 評(píng)論0 收藏0
  • 關(guān)於Javascript中的new運(yùn)算符,構(gòu)造函數(shù)與原型鏈一些理解

    摘要:前言文章主要基于高級(jí)程序設(shè)計(jì)總結(jié)的基本重寫(xiě)了全文補(bǔ)充知識(shí)點(diǎn)新增實(shí)例優(yōu)化排版新增檢測(cè)方法技巧用法構(gòu)造函數(shù)創(chuàng)建一個(gè)用護(hù)定義的對(duì)象類(lèi)型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象類(lèi)型之一命令執(zhí)行構(gòu)造函數(shù)返回一個(gè)實(shí)例對(duì)象構(gòu)造函數(shù)一個(gè)指定對(duì)象實(shí)例的類(lèi)型的函數(shù)傳慘一 前言 文章主要基于>總結(jié)的!!!PS: 2018/05/09 基本重寫(xiě)了全文,補(bǔ)充知識(shí)點(diǎn),新增實(shí)例,優(yōu)化排版PS: 2018/05/11 新增檢測(cè)...

    cikenerd 評(píng)論0 收藏0
  • 如何優(yōu)雅的理解ECMAScript中的對(duì)象

    摘要:標(biāo)準(zhǔn)對(duì)象,語(yǔ)義由本規(guī)范定義的對(duì)象。這意味著雖然有,本質(zhì)上依然是構(gòu)造函數(shù),并不能像那樣表演多繼承嵌套類(lèi)等高難度動(dòng)作。不過(guò)這里的并不是我們所說(shuō)的數(shù)據(jù)類(lèi)型,而是對(duì)象構(gòu)造函數(shù)。 序 ECMAScript is an object-oriented programming language for performing computations and manipulating computat...

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

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

0條評(píng)論

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