JavaScript 學者必看「new」
當你使用的時候,會:
1.創建一個新的空對象;
2.將this綁定到該對象;
3.添加一個名為的新屬性,並且指向構造函數的原型();
4.返回該對象。
如果你沒有特別理解,那麼我們接下來用例子來詳細解釋。首先定義一個構造函數,該函數接收兩個參數和。
現在我們使用來創建一個新的對象:
到底發生了什麼呢?
1.一個新的對象創建,我們叫它;
2.綁定到,任何對this的引用就是對的引用;
3.屬性被添加到obj對象。會指向;
4.該對象被賦值給變數。
我們可以通過列印測試:
接下來深入看看是怎麼回事。
原型(Prototype)
每一個JavaScript對象都有一個原型。所有的對象都從它的原型中繼承對象和屬性。
打開瀏覽器開發者控制面板(Windows: Ctrl + Shift + J)(Mac: Cmd + Option + J),輸入之前定義的函數:
為了證實每一個對象都有原型,輸入:
你會看到返回了一個對象。現在我們來嘗試定義一個新的對象:
根據之前的解釋,指向的對象會有一個屬性,並且應該指向父親的,我們來測試一下:
會指向Student的構造函數,我們列印出來看看:
好像事情越來越複雜了,我們用圖來形象描述一下:
的構造函數有一個叫的屬性,該屬性又有一個的屬性反過來指向Student構造。它們構成了一個環。當我們使用去創建一個新的對象,每一個對象都有屬性反過來指向。
這個設計對於繼承來說很重要。因為原型對象被所有由該構造函數創建的對象共享。當我們添加函數和屬性到原型對象中,其它所有的對象都可以使用。
在本文我們只創建了兩個對象,如果我們創建20,000個,那麼將屬性和函數放到而不是每一個對象將會節省非常很多的存儲和計算資源。
我們來看一個例子:
我們為的原型添加了一個新的函數 – 所以使用創建的學生對象都可以訪問該函數。
創建一個新的學生對象,再次測試:
在JavaScript中,首先查看當前對象是否擁有該屬性;如果沒有,看原型中是否有該屬性。這個規則會一直持續,直到成功找到該屬性或則到最頂層全局對象也沒找到而返回失敗。
繼承讓你平時不需要去定義函數而可以直接使用。因為這個函數內置在的原型上。每一個我們創建的對象最終都指向,所以可以調用。當然, 我們也可以重寫這個函數:
創建的name對象首先查看是否擁有,如果有就不會去原型中查找。
總結
也許這些概念對你來說有點多,但是當你理解了,使用原型可以讓你寫出更加高效的代碼。
原文:https://hackernoon.com/javascript-for-beginners-the-new-operator-cee35beb669e
譯者:Fundebug
譯文:https://blog.fundebug.com/2017/06/02/javascript-new-for-beginner/
點擊展開全文


※程序員才有的表情包,拿走不謝!
※細數程序員七大恨
※順豐菜鳥這麼一鬧,每天可能影響百萬消費者
※15個常用的javaScript正則表達式
※關於編程,我要矯情兩句
TAG:JavaScript |
※《Fast & Furious》迷必看!Paul Walker 紀錄片《I Am Paul Walker》預告登場
※大數據入門必看:Hive、Hadoop、Storm詮釋
※新 iPad Air 還是 mini?買前必看
※TensorFlow入門必看:Google AI實習生經驗談
※新 iPad Air 還是 mini?買前必看!
※由淺入深學習Python Django框架「小白必看」
※iPhone用戶必看:用Safari瀏覽器學會這5招才專業
※Facebook小白必看:如何快速創建Facebook主頁
※必看!你們要的FAKE耐克大氣墊Nike Air VaporMax2.0
※入門必看 | 深度Q-learning簡介【RL系列】
※AJ迷必看系列!Air Jordan 4 「Bred」 五代鞋型歷史大演變!
※粉絲必看!《B:The Beginning》主創聲優對談
※買前必看 Galaxy S9+和Pixel 2 XL弱光拍照哪家強?
※蘋果粉絲必看!RED 版的 iPhone 8/8 Plus 圖多開箱!
※買前必看:4款無法使用Switch Lite遊玩的熱門遊戲
※貧民窟女孩必看!必買開架彩妝colourpop
※自建站賣家必看:Shopify賬號被封原因&收費準則
※FinishLine買鞋必看攻略,既便宜又不砍單~
※為了你的iPhone必看:iOS12究竟有多快?
※photoshop新手必看的120條實用技巧!