摘要:原理是類的構(gòu)造函數(shù)被調(diào)用,并且實(shí)例化了新的對象。盡管的語法非常相同,但使用在底層還是會引發(fā)不同行為沒有構(gòu)造函數(shù)首先,我們并不是必須要用一個類來生成對象。構(gòu)造函數(shù)只不過是在調(diào)用時關(guān)鍵字放在其前面的普通方法而已。
由于存在海量的庫和工具,以及各種各樣簡化你開發(fā)的玩意兒,很多程序員開始在不深入了解底層的情況下開發(fā)應(yīng)用。JavaScript就是這種現(xiàn)象的代言人。JavaScript作為一種最復(fù)雜的且流傳最廣泛的語言,很多的開發(fā)者被高層次庫的使用吸引,同時將糟粕抽離。
盡管你在不深入理解的情況下仍可以開發(fā)值得稱道的應(yīng)用,但深入JavaScript絕對讓你收益。對“怪異部分”的理解可以讓高級開發(fā)者在蕓蕓眾生中脫穎而出,另外,雖然JS的生態(tài)日新月異,但對“怪異部分”的理解依舊是所有其他工具的基礎(chǔ)。理解了這些就會拓展你的視野,并且改變你看待開發(fā)過程的方式。
在我 之前的文章 中稍微提到過new關(guān)鍵字,它創(chuàng)建了一個對this的綁定。在面向?qū)ο笳Z言中,new關(guān)鍵字總是用于實(shí)例化一個類。
var dog = new Dog();
原理是類的構(gòu)造函數(shù)被調(diào)用,并且實(shí)例化了新的對象。盡管JavaScript的語法非常相同,但使用new在底層還是會引發(fā)不同行為
沒有構(gòu)造函數(shù)首先,我們并不是必須要用一個類來生成對象。在JavaScript中我們可以用方法(function)就能實(shí)現(xiàn)此目標(biāo)。構(gòu)造函數(shù)只不過是在調(diào)用時new關(guān)鍵字放在其前面的普通方法而已。你可以說沒有構(gòu)造函數(shù)-只有構(gòu)造函數(shù)調(diào)用,因?yàn)閷?shí)際上所有的函數(shù)都可以被調(diào)用去創(chuàng)建對象。這并不是對象或者類或者任何特殊定義方式的一部分。
這里有幾個構(gòu)造函數(shù)調(diào)用經(jīng)歷的步驟,但我們只關(guān)注現(xiàn)在討論的事項(xiàng):
1.一個新對象被創(chuàng)建
2.this被綁定到新對象上面
3.除非函數(shù)返回它自己的對象,否則調(diào)用將返回已構(gòu)造的對象
function Person(name) { this.name = name } var person = new Person("Alex") console.log(person.name) // Alex總結(jié)
總結(jié)一下,這并不是一個難懂的概念。要點(diǎn)就是要始終記得,任何方法(function)都可以像構(gòu)造函數(shù)一樣被調(diào)用,并且會創(chuàng)建一個this的綁定。
非常感謝閱讀,期待你的反饋。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95006.html
摘要:在中,當(dāng)使用關(guān)鍵字調(diào)用函數(shù)構(gòu)造函數(shù)時,函數(shù)構(gòu)造函數(shù)中也有這個概念,但是它不是惟一的規(guī)則,而且常??梢砸脕碜圆煌瑘?zhí)行上下文的不同對象。因此,我們使用調(diào)用函數(shù),可以看到這是對象,并且的屬性是正常的。 一直以來,javascript里邊的this都是一個很難理解的東西,之前看的最多的就是阮一峰老師關(guān)于this的理解: http://www.ruanyifeng.com/blo... htt...
摘要:所以是在一秒后顯示的。這個行為不會耗費(fèi)資源,因?yàn)橐婵梢酝瑫r處理其他任務(wù)執(zhí)行其他腳本,處理事件等。每個回調(diào)首先被放入微任務(wù)隊(duì)列然后在當(dāng)前代碼執(zhí)行完成后被執(zhí)行。,函數(shù)是異步的,但是會立即運(yùn)行。否則,就返回結(jié)果,并賦值。 「async/await」是 promises 的另一種更便捷更流行的寫法,同時它也更易于理解和使用。 Async functions 讓我們以 async 這個關(guān)鍵字開...
摘要:當(dāng)面試中讓我解釋一下閉包時我懵逼了。這個解釋開始可能有點(diǎn)晦澀,讓我們抽絲剝繭摘下閉包的真面目。此文不詳述作用域有專門的主題闡述,不過作用域是理解閉包原理的基礎(chǔ)。這才是閉包的真正便利之處。閉包使用不當(dāng)就會很坑。 原文鏈接 為什么深度學(xué)習(xí)JavaScript? JavaScript如今是最流行的編程語言之一。它運(yùn)行在瀏覽器、服務(wù)器、移動設(shè)備、桌面應(yīng)用,也可能包括冰箱。無需我舉其他再多不相干...
摘要:一個表示編譯器檢測到一個無效的引用值。在實(shí)際情況中,往往是在獲取一個未被賦值的引用時被拋出。任何一個函數(shù)上下文都有一個被稱為活動對象的變量對象。沒有找到的話,就會認(rèn)為引用名沒有基礎(chǔ)值并拋出的錯誤。下沒有下的屬性僅存在于被啟動的情況下。 和其他語言相比,javascript中的對于undefined的理解還是有點(diǎn)讓人困惑的。特別是試著理解ReferenceErrors錯誤(x is no...
摘要:關(guān)鍵字會實(shí)例化一個新的對象實(shí)例,并在執(zhí)行構(gòu)造函數(shù)時將指向該實(shí)例。原文鏈接譯是什么對象的內(nèi)部工作原理 原文鏈接:What is this? The Inner Workings of JavaScript Objects (需要梯子) 原文作者:Eric Elliott 譯文永久鏈接:【譯】什么是 this?JavaScript 對象的內(nèi)部工作原理 譯者:士心 翻譯目的:函數(shù)動...
閱讀 3751·2021-09-22 10:57
閱讀 1922·2019-08-30 15:55
閱讀 2712·2019-08-30 15:44
閱讀 1741·2019-08-30 15:44
閱讀 1885·2019-08-30 15:44
閱讀 2256·2019-08-30 12:49
閱讀 1060·2019-08-29 18:47
閱讀 3144·2019-08-29 16:15