成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

老生常談,new運(yùn)算符到底干了啥

roundstones / 2987人閱讀

摘要:冬天來了,好好學(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

相關(guān)文章

  • js new 對(duì)象了啥

    摘要:屬性和方法被加入到引用的對(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...

    codergarden 評(píng)論0 收藏0
  • js new 對(duì)象了啥

    摘要:屬性和方法被加入到引用的對(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...

    betacat 評(píng)論0 收藏0
  • JS核心知識(shí)點(diǎn)梳理——原型、繼承(下)

    摘要:引言上篇文章介紹原型,這篇文章接著講繼承,嘔心瀝血之作,大哥們點(diǎn)個(gè)贊呀明確一點(diǎn)并不是真正的面向?qū)ο笳Z言,沒有真正的類,所以我們也沒有類繼承實(shí)現(xiàn)繼承有且僅有兩種方式,和原型鏈在介紹繼承前我們先介紹下其他概念函數(shù)的三種角色一個(gè)函數(shù),有三種角色。 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 上篇文章介紹原型,...

    joyqi 評(píng)論0 收藏0
  • 3分鐘看懂Activity啟動(dòng)流程

    摘要:在結(jié)合下面簡要的分析,分鐘內(nèi)你就能搞明白的啟動(dòng)流程。關(guān)于的啟動(dòng),我在驚天秘密從開始,揭露線程通訊的詭計(jì)和主線程的陰謀一文中有提到過。從上圖可以看到,方法中主要做的事情有初始化主線程的主。并使主線程進(jìn)入等待接收消息的無限循環(huán)狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000009912818); 背景介紹 從事開發(fā)到了一定階段,...

    bang590 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<