new關(guān)鍵字具體做了什么?

用 var anObject = new aFunction() 形式創(chuàng)建對(duì)象的過程實(shí)際上可以分為三步:

第一步是建立一個(gè)新對(duì)象;

第二步將該對(duì)象內(nèi)置的原型對(duì)象設(shè)置為構(gòu)造函數(shù)prototype引用的那個(gè)原型對(duì)象;

第三步就是將該對(duì)象作為this參數(shù)調(diào)用構(gòu)造函數(shù),完成成員設(shè)置等初始化工作。

其實(shí)javascript的new關(guān)鍵字只不過做了五件事情:

1.創(chuàng)建Object

2.查找class的prototype上的所有方法、屬性,復(fù)制一份給創(chuàng)建的Object(注意,如果prototype上有屬性是function或者數(shù)組或者Object,那么只復(fù)制指針)

3.將構(gòu)造函數(shù)classA內(nèi)部的this指向創(chuàng)建的Object

4.創(chuàng)建的Object的__proto__指向class的prototype

5.執(zhí)行構(gòu)造函數(shù)class

// 定義類 類名字是 classA

functionclassA(){

this.b=1;

}

classA.prototype.b=44;

classA.prototype.show?=function(){

alert(this.b);

};

//?用new實(shí)例化

varb?=newclassA();

b.show();

//?用函數(shù)實(shí)例化

functionnewClass(cls,args){

varobj?=?{};

for(varpincls.prototype)

obj[p]?=?cls.prototype[p];

obj.__proto__?=?cls.prototype;

cls.apply(obj,args||[]);

returnobj;

};

vark?=?newClass(classA);

k.show();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 我基本從來不寫工作的事兒。 因?yàn)楣ぷ鲗?shí)在沒啥好寫的,不就是工作唄。 然後今天打算稍微寫一點(diǎn),就寫JS吧。 我一直相...
    LostAbaddon閱讀 1,462評(píng)論 22 21
  • ECMAScript關(guān)鍵字 delete do else finally function in instance...
    doudou2閱讀 726評(píng)論 0 0
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,774評(píng)論 0 9
  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡(jiǎn)單...
    舟漁行舟閱讀 7,842評(píng)論 2 17
  • 練習(xí)45:一個(gè)簡(jiǎn)單的TCP/IP客戶端 原文:Exercise 45: A Simple TCP/IP Clien...
    布客飛龍閱讀 574評(píng)論 0 34