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

資訊專欄INFORMATION COLUMN

new命令的原理

Kyxy / 1679人閱讀

function Person(name, age) {
    this.name = name;
    this.age = age
}

var person = new Person("小明", 18);
console.log(person.name);  //小明
console.log(person.age);   //18

執(zhí)行new命令會(huì)經(jīng)過以下幾個(gè)步驟

創(chuàng)建一個(gè)空對(duì)象,這個(gè)對(duì)象將會(huì)是new Person()返回的對(duì)象實(shí)例;

將這個(gè)空對(duì)象的原型指向構(gòu)造函數(shù)prototype屬性;

構(gòu)造函數(shù)this指向空對(duì)象,并運(yùn)行構(gòu)造函數(shù);

判斷構(gòu)造函數(shù)返回的是不是對(duì)象,是的話返回默認(rèn)對(duì)象,不是的話返回之前創(chuàng)建的空對(duì)象,沒有返回值默認(rèn)返回空對(duì)象

用代碼解釋一下
function Person(name, age) {
    this.name = name;
    this.age = age
    //return "小明" //如果返回的不是Object類型,將忽略這個(gè)return 返回之前創(chuàng)建的空對(duì)象
   /* return {     //如果返回的是Object類型,直接返回這個(gè)對(duì)象
        "name" : "小花",
        "age" : 22
    } */
}

function _new(person, ...rest){
    var obj = {};  // 創(chuàng)建一個(gè)空對(duì)象,這個(gè)對(duì)象將會(huì)是返回的對(duì)象實(shí)例
    obj.__prototype__ = person.prototype; // 將這個(gè)空對(duì)象的原型指向person的prototype屬性;
    //上述兩步可以合為一步 :  var obj = Object.create(person.prototype)  
   
    var res = person.apply(obj, rest);  // 將person的this指向空對(duì)象,并運(yùn)行person函數(shù),apply命令綁定this后就會(huì)運(yùn)行person
    return (typeof res === "object" && res != null) ? res: obj;
    // 判斷res返回的是不是對(duì)象,是的話返res,不是的話返回之前創(chuàng)建的obj,沒有返回值默認(rèn)返回obj
}

var xiaoming = _new(Person, "小明", 15)
console.log(xiaoming .name);  //小明
console.log(xiaoming .age);   //15

本篇如能對(duì)您有所幫助,實(shí)在是感到榮幸。如有不合理之處也請(qǐng)大家多多指點(diǎn)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98445.html

相關(guān)文章

  • new 命令原理

    摘要:創(chuàng)建一個(gè)空對(duì)象,作為將要返回的對(duì)象實(shí)例將這個(gè)空對(duì)象的原型,指向構(gòu)造函數(shù)的屬性。如果構(gòu)造函數(shù)內(nèi)部有語句,而且后面跟著一個(gè)對(duì)象,命令會(huì)返回語句指定的對(duì)象否則,就會(huì)不管語句,返回對(duì)象。 前言 之前一直沒完全弄清楚js原型鏈和繼承,有時(shí)候是自己的理解,有時(shí)候靠死記;最近要回頭看看js的基礎(chǔ),順便記錄一些內(nèi)容。摘抄于阮一峰大神;如果想好好復(fù)習(xí)一下js基礎(chǔ)內(nèi)容,戳這里https://wangdoc...

    aikin 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)之Object(下)new命令

    摘要:命令作用作用是執(zhí)行構(gòu)造函數(shù),返回實(shí)例對(duì)象上面例子是自定義一個(gè)構(gòu)造函數(shù),其最大的特點(diǎn)就是首字母大寫,用執(zhí)行構(gòu)造函數(shù)其中,在的執(zhí)行下,代表了實(shí)例化后的對(duì)象,這個(gè)也就有屬性注意點(diǎn)如果不用執(zhí)行構(gòu)造函數(shù),那么指向的是全局有兩種方式可以避免內(nèi)部定義嚴(yán)格 new命令 new作用 作用是執(zhí)行構(gòu)造函數(shù),返回實(shí)例對(duì)象 function F() { this.name = object } var ...

    Salamander 評(píng)論0 收藏0
  • Java 編譯器 javac 筆記:javac API、注解處理 API 與 Lombok 原理

    摘要:對(duì)語法樹的掃描,同樣提供了掃描器。詞法分析過程如下圖所示語法分析,即根據(jù)語法由序列生成抽象語法樹,對(duì)應(yīng)實(shí)現(xiàn)類為。生成的抽象語法樹如下圖所示的實(shí)現(xiàn)原理依賴開發(fā)的典型的第三方庫有,代碼自動(dòng)生成的和,代碼檢查的和,編譯階段完成依賴注入的等。 原文:http://nullwy.me/2017/04/java...如果覺得我的文章對(duì)你有用,請(qǐng)隨意贊賞 javac 是 Java 代碼的編譯器 [...

    lookSomeone 評(píng)論0 收藏0
  • FE.BASE-vscode使用、原理、插件開發(fā)筆記

    摘要:插件提供內(nèi)容,負(fù)責(zé)渲染。增量更新,盡可能地減少重新渲染長時(shí)間運(yùn)行的任務(wù)應(yīng)該支持,并可以取消插件能夠正確地處理對(duì)象的生命周期。使用了模式,運(yùn)行可以將這個(gè)對(duì)象銷毀。 使用 命令行使用 幫助:code --help 使用已經(jīng)打開的窗口來打開文件:code -r 打開文件并滾動(dòng)到特定行:code -r -g package.json:128 比較兩個(gè)文件:code -r -d a.tx...

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

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

0條評(píng)論

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