摘要:冬天來了,好好學(xué)習(xí),天天向上。在里面,得益于字面量對(duì)象,我們可以輕松的創(chuàng)建出一個(gè)對(duì)象,比如就可以直接創(chuàng)建對(duì)象。而在其它語言里面,無法通過這樣的方式創(chuàng)建一個(gè)對(duì)象,一般會(huì)借助構(gòu)造方法和運(yùn)算符。
冬天來了,好好學(xué)習(xí),天天向上。
在js里面,得益于字面量對(duì)象,我們可以輕松的創(chuàng)建出一個(gè)對(duì)象,比如var o = {name: "tom"},就可以直接創(chuàng)建對(duì)象o。而在其它oo語言里面,無法通過這樣的方式創(chuàng)建一個(gè)對(duì)象,一般會(huì)借助構(gòu)造方法和new運(yùn)算符。
先看個(gè)例子,
function Person (name) { this.name = name } function Animal (type) { this.type = type return {type: "dog"} } const p1 = Person("tom") const p2 = new Person("tom") const a1 = Animal("cat") const a2 = new Animal("cat")
p1,p2,a1,a2分別等于什么?
p1是函數(shù)Person執(zhí)行的結(jié)果,而函數(shù)Person沒有返回值,所以p1 = undefined;同理a1 = {type: "dog"}
p2是Person的實(shí)例, p2 = {name: "tom"};a2是Animal的實(shí)例,a2 = {type: "dog"}
那么問題來了,為什么不是期望中的a2 = {type: "cat"}
因?yàn)閚ew主要干了下面幾件事:
創(chuàng)建一個(gè)新對(duì)象o,并將新對(duì)象o的原型對(duì)象指向構(gòu)造函數(shù)的原型屬性
將構(gòu)造函數(shù)的this指向新對(duì)象o
執(zhí)行構(gòu)造函數(shù)中的代碼,如果返回值是個(gè)對(duì)象(引用類型)則返回該對(duì)象,否則返回新對(duì)象o(注意:如果返回null也返回新對(duì)象o)
針對(duì)上面的Person類,可以依據(jù)上面的規(guī)則寫出new函數(shù)
const mynew = (Func, name) => { let o = {} o.__proto__ = Func.prototype let res = Func.call(o, name) if(res instanceof Object) { return res } else { return o } }
執(zhí)行mynew函數(shù)驗(yàn)證
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100236.html
摘要:屬性和方法被加入到引用的對(duì)象中。并執(zhí)行了該函數(shù)新創(chuàng)建的對(duì)象由所引用,并且最后隱式的返回。 1、創(chuàng)建一個(gè)空對(duì)象,并且 this 變量引用該對(duì)象,// lat target = {}; 2、繼承了函數(shù)的原型。// target.proto = func.prototype; 3、屬性和方法被加入到 this 引用的對(duì)象中。并執(zhí)行了該函數(shù)func// func.call(target); 4...
摘要:屬性和方法被加入到引用的對(duì)象中。并執(zhí)行了該函數(shù)新創(chuàng)建的對(duì)象由所引用,并且最后隱式的返回。 1、創(chuàng)建一個(gè)空對(duì)象,并且 this 變量引用該對(duì)象,// lat target = {}; 2、繼承了函數(shù)的原型。// target.proto = func.prototype; 3、屬性和方法被加入到 this 引用的對(duì)象中。并執(zhí)行了該函數(shù)func// func.call(target); 4...
摘要:引言上篇文章介紹原型,這篇文章接著講繼承,嘔心瀝血之作,大哥們點(diǎn)個(gè)贊呀明確一點(diǎn)并不是真正的面向?qū)ο笳Z言,沒有真正的類,所以我們也沒有類繼承實(shí)現(xiàn)繼承有且僅有兩種方式,和原型鏈在介紹繼承前我們先介紹下其他概念函數(shù)的三種角色一個(gè)函數(shù),有三種角色。 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 上篇文章介紹原型,...
摘要:在結(jié)合下面簡要的分析,分鐘內(nèi)你就能搞明白的啟動(dòng)流程。關(guān)于的啟動(dòng),我在驚天秘密從開始,揭露線程通訊的詭計(jì)和主線程的陰謀一文中有提到過。從上圖可以看到,方法中主要做的事情有初始化主線程的主。并使主線程進(jìn)入等待接收消息的無限循環(huán)狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000009912818); 背景介紹 從事開發(fā)到了一定階段,...
閱讀 2761·2021-11-16 11:45
閱讀 1669·2021-09-26 10:19
閱讀 2062·2021-09-13 10:28
閱讀 2822·2021-09-08 10:46
閱讀 1547·2021-09-07 10:13
閱讀 1544·2019-08-30 13:50
閱讀 1383·2019-08-30 11:17
閱讀 1463·2019-08-29 13:18