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