推薦看imooc的JavaScript深入教程,對JavaScript面向?qū)ο笾v解的更清晰.
-----分割線----
第一次用prototype的時(shí)候,比較迷茫。相對于Java,OC這類語言來說,prototype來繼承完全搞不懂在干什么??戳爽F(xiàn)代簡明魔法的文章后,恍然大悟。其實(shí)是因?yàn)镴avaScript是一種base prototype 語言,java之類的是base class語言。所以當(dāng)然大不相同,不需要以以前java的方式來思考,重新接受一種新的方式即可
最后一段即為大致js的工作全過程:
所以var obj=new func()這個(gè)過程更具體是這樣的:
javascript解析引擎遇到new后,開辟一片內(nèi)存并創(chuàng)建了一個(gè)空對象,并且將“this”指向這個(gè)空對象
javascript解析引擎將這個(gè)空對象的proto指向后面緊跟著的構(gòu)造函數(shù)默認(rèn)的prototype對象(一指向到prototype對象后,解析引擎就知道了“噢,這個(gè)對象要擁有這個(gè)prototype對象的屬性和方法了”)
javascript解析引擎執(zhí)行構(gòu)造函數(shù)體內(nèi)的代碼,也就正式開始對這個(gè)空對象進(jìn)行構(gòu)造(或者說裝配)的過程了(this.name="xxx",this.sayHello=function(){...}等等)
對象被構(gòu)造裝配好,并賦值到等號(hào)左邊的變量。
PS:__proto__type上文已經(jīng)提到,不了解的讀者,請去閱讀全文。