摘要:我們知道創(chuàng)建了一個函數(shù)就帶了一個屬性,創(chuàng)建一個實例就帶著一個指針,這個指針是實例和構(gòu)造函數(shù)的原型對象間的聯(lián)系,這個指針在腳本中是不可見的,也就是你不能訪問的,但是在和中,提供了來支持訪問,這么一說,相信大家應(yīng)該能明白吧
前言
一般我們看到prototype就會下意識的說這不就是原型對象嘛?但是你們真的了解prototype嘛?就當(dāng)你們很了解了,畢竟是基礎(chǔ)知識,我就簡單說說
正文先說說工廠模式的由來吧,創(chuàng)建對象我們通常可以用new Object()或者直接對象字面量{}創(chuàng)建,但是要是對象之間又有其他共用的代碼塊又將如何呢?不錯,這會造成大量的代碼冗余,因為在JS的世界里沒有接口的概念(ES5之前),我們平時在JS所說的類也并非實際意義上的類,很多類的特性JS都沒有,我一般就把JS的類稱為一個"另類",雖然ES6有了所謂的接口,但是萬變不離其宗。扯得有點遠啊,既然普通創(chuàng)建對象會造成冗余,那怎么避免呢?起初用的是工廠模式,如demo1所示:
demo1function 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
demo2function 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)建了一個函數(shù)就帶了一個prototype屬性,創(chuàng)建一個實例就帶著一個[[prototype]]指針,這個指針是實例和構(gòu)造函數(shù)的原型對象間的聯(lián)系,這個指針在腳本中是不可見的,也就是你不能訪問的,但是在Firefox、Safari 和 Chrome中,提供了__proto__來支持訪問,這么一說,相信大家應(yīng)該能明白吧
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/96599.html
摘要:這又是什么呢這個相對之前的比較復(fù)雜,但是高效的一點是只調(diào)用一次被繼承者構(gòu)造函數(shù)原理就是通過寄生方式創(chuàng)建一個被繼承者的副本,副本和被繼承者共用一個這樣就解決了之前的問題返回的一個副本設(shè)置指向因為新副本的原型對象被重寫副本作為的原型對象 前言 我們學(xué)JAVA的時候說到繼承就是一個extends ClassName的事情,但是在JS的世界里繼承和我們在JAVA所認(rèn)識的繼承實現(xiàn)方法又有一些不同...
摘要:為啥我要自己實現(xiàn)一個語法糖為什么要自己實現(xiàn)一個語法糖呢因為之前對于里的語法糖一直是理論理解但是并親自嘗試實現(xiàn)過。直到有一天在頭條的面試中我聊了摸著自己的良心說我可以實現(xiàn)一個語法糖面試官嗯那你實現(xiàn)一個吧。我們知道構(gòu)造函數(shù)一般是不寫的。 為啥我要自己實現(xiàn)一個new語法糖? 為什么要自己實現(xiàn)一個new語法糖呢? 因為之前對于JS里的new語法糖一直是理論理解,但是并親自嘗試實現(xiàn)過。 直到有一...
摘要:首先定義空函數(shù)這個不用解釋,然后把這個空函數(shù)的原型指向為的原型,然后再把的原型指向這個新的對象,一個完美傳遞最后,在把原型的構(gòu)造方法定義成華麗的轉(zhuǎn)身,結(jié)果如下結(jié)果還是不對,于是我又在大神的肩膀上墊了一下腳。 總是聽說面向?qū)ο?,類,繼承,__proto__,prototype,constructor.......于是乎小整理一下。 首先說,JS里的繼承是怎么弄的呢? 首先創(chuàng)建類(Pers...
摘要:前言文章主要基于高級程序設(shè)計總結(jié)的基本重寫了全文補充知識點新增實例優(yōu)化排版新增檢測方法技巧用法構(gòu)造函數(shù)創(chuàng)建一個用護定義的對象類型的實例或具有構(gòu)造函數(shù)的內(nèi)置對象類型之一命令執(zhí)行構(gòu)造函數(shù)返回一個實例對象構(gòu)造函數(shù)一個指定對象實例的類型的函數(shù)傳慘一 前言 文章主要基于>總結(jié)的!!!PS: 2018/05/09 基本重寫了全文,補充知識點,新增實例,優(yōu)化排版PS: 2018/05/11 新增檢測...
摘要:標(biāo)準(zhǔn)對象,語義由本規(guī)范定義的對象。這意味著雖然有,本質(zhì)上依然是構(gòu)造函數(shù),并不能像那樣表演多繼承嵌套類等高難度動作。不過這里的并不是我們所說的數(shù)據(jù)類型,而是對象構(gòu)造函數(shù)。 序 ECMAScript is an object-oriented programming language for performing computations and manipulating computat...
閱讀 3713·2021-10-12 10:11
閱讀 1980·2019-08-30 15:53
閱讀 1589·2019-08-30 13:15
閱讀 2303·2019-08-30 11:25
閱讀 1798·2019-08-29 11:24
閱讀 1648·2019-08-26 13:53
閱讀 3522·2019-08-26 13:22
閱讀 1747·2019-08-26 10:24