成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

你們真的理解prototype和__proto__嘛?

makeFoxPlay / 2476人閱讀

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

前言

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

正文

先說說工廠模式的由來吧,創(chuàng)建對(duì)象我們通??梢杂胣ew Object()或者直接對(duì)象字面量{}創(chuàng)建,但是要是對(duì)象之間又有其他共用的代碼塊又將如何呢?不錯(cuò),這會(huì)造成大量的代碼冗余,因?yàn)樵贘S的世界里沒有接口的概念(ES5之前),我們平時(shí)在JS所說的類也并非實(shí)際意義上的類,很多類的特性JS都沒有,我一般就把JS的類稱為一個(gè)"另類",雖然ES6有了所謂的接口,但是萬變不離其宗。扯得有點(diǎn)遠(yuǎn)啊,既然普通創(chuàng)建對(duì)象會(huì)造成冗余,那怎么避免呢?起初用的是工廠模式,如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解決了問題,但是這樣寫沒有任何封裝而言, show函數(shù)并不是引用類型特定能訪問的,如demo1輸出了global一樣,為了解決此類問題,便有了原型模式,也就是你們經(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ū)別,還各自寫了例子,雖然說了很多,也是解釋得不清不楚。我們知道創(chuàng)建了一個(gè)函數(shù)就帶了一個(gè)prototype屬性,創(chuàng)建一個(gè)實(shí)例就帶著一個(gè)[[prototype]]指針,這個(gè)指針是實(shí)例和構(gòu)造函數(shù)的原型對(duì)象間的聯(lián)系,這個(gè)指針在腳本中是不可見的,也就是你不能訪問的,但是在Firefox、Safari 和 Chrome中,提供了__proto__來支持訪問,這么一說,相信大家應(yīng)該能明白吧

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

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

相關(guān)文章

  • 你們真的了解JS的繼承

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

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

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

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

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

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

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

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

    摘要:標(biāo)準(zhǔn)對(duì)象,語義由本規(guī)范定義的對(duì)象。這意味著雖然有,本質(zhì)上依然是構(gòu)造函數(shù),并不能像那樣表演多繼承嵌套類等高難度動(dòng)作。不過這里的并不是我們所說的數(shù)據(jù)類型,而是對(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)論

閱讀需要支付1元查看
<