• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    原生JS封裝_new函數實現new關鍵字的功能

    來源:懂視網 責編:小采 時間:2020-11-27 22:10:07
    文檔

    原生JS封裝_new函數實現new關鍵字的功能

    原生JS封裝_new函數實現new關鍵字的功能:一.前言 眾所周知:沒有對象怎么辦?那就new一個! 那么在JS中,當我們new一個對象的時候,這個new關鍵字內部都干了什么呢? 現在我們就來剖析一下原生JS中new關鍵字內部的工作原理。 二.原始的new 首先,我們先new一個對象看看: //創建Person構
    推薦度:
    導讀原生JS封裝_new函數實現new關鍵字的功能:一.前言 眾所周知:沒有對象怎么辦?那就new一個! 那么在JS中,當我們new一個對象的時候,這個new關鍵字內部都干了什么呢? 現在我們就來剖析一下原生JS中new關鍵字內部的工作原理。 二.原始的new 首先,我們先new一個對象看看: //創建Person構

    一.前言

    眾所周知:沒有對象怎么辦?那就new一個!

    那么在JS中,當我們new一個對象的時候,這個new關鍵字內部都干了什么呢?
    現在我們就來剖析一下原生JS中new關鍵字內部的工作原理。

    二.原始的new

    首先,我們先new一個對象看看:

     //創建Person構造函數,參數為name,age
     function Person(name,age){
       this.name = name;
       this.age = age;
      }
     //實例化對象小明
     xm = new Person('xiaoming',18);
     //打印實例化出來的對象小明
     console.log(xm);

    打印結果:


    從打印結果中可以看到:

    用new關鍵字實例化對象時,首先創建了一個空對象xm,并且這個空對象包含兩個屬性name和age,分別對應構造函數中的兩個屬性,其次我們也可以知道實例化出來的這個對象xm是繼承自Person.prototype,那么現在我們就可以總結出new關鍵字在實例化對象時內部都干了什么,其實,new關鍵字內部干了如下三件事(已知構造函數為Func):

    1.創建一個空對象,并使該空對象繼承Func.prototype;

    2.執行構造函數,并將this指向剛剛創建的新對象;

    3.返回新對象;

    三.封裝_new函數

    當我們知道new關鍵字的內部原理后,我們就可以封裝一個_new函數,使其用于與new關鍵字同樣的功能。

    _new函數需要傳入以下幾個參數:

    第一個參數:構造函數名Func;

    第二個參數及后面的參數:構造函數的參數

     function _new(){
      //1.拿到傳入的參數中的第一個參數,即構造函數名Func
       var Func = [].shift.call(arguments);
       //2.創建一個空對象obj,并讓其繼承Func.prototype
       var obj = Object.create(Func.prototype);
       //3.執行構造函數,并將this指向創建的空對象obj
       Func.apply(obj,arguments)
       //4.返回創建的對象obj
       return obj
     }

    四.測試_new函數

    封裝好后,我們來測試一下封裝的_new函數,看看它是否實現了和原生new關鍵字同樣的功能。

     //創建Person構造函數,參數為name,age
     function Person(name,age){
       this.name = name;
       this.age = age;
     } 
     function _new(){
       //1.拿到傳入的參數中的第一個參數,即構造函數名Func
       var Func = [].shift.call(arguments);
       //2.創建一個空對象obj,并讓其繼承Func.prototype
       var obj = Object.create(Func.prototype);
       //3.執行構造函數,并將this指向創建的空對象obj
       Func.apply(obj,arguments)
       //4.返回創建的對象obj
       return obj
     }
     xm = _new(Person,'xiaoming',18);
     console.log(xm);

    測試結果:



    從測試結果看到,_new函數的功能與new關鍵字完全一致。

    總結

    以上所述是小編給大家介紹的原生JS封裝_new函數實現new關鍵字的功能,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    原生JS封裝_new函數實現new關鍵字的功能

    原生JS封裝_new函數實現new關鍵字的功能:一.前言 眾所周知:沒有對象怎么辦?那就new一個! 那么在JS中,當我們new一個對象的時候,這個new關鍵字內部都干了什么呢? 現在我們就來剖析一下原生JS中new關鍵字內部的工作原理。 二.原始的new 首先,我們先new一個對象看看: //創建Person構
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久精品这里热有精品| 成人一区二区三区精品| 久久精品亚洲精品国产欧美| 亚洲码国产精品高潮在线| 国产精品女人呻吟在线观看| 成人午夜精品久久久久久久小说| 一本一本久久A久久综合精品| 亚洲国产精品综合久久网络| 久久精品成人免费网站| 人精品影院| 国产久热精品无码激情| 亚洲精品国产福利一二区| 91人妻人人澡人人爽人人精品| 国产乱码精品一区二区三区中文| 中文字幕精品久久久久人妻| 国产精品一区二区三区99| 久久成人精品视频| 国产精品视频一区二区三区无码| 中文字幕日韩精品无码内射| 精品视频久久久久| 91无码人妻精品一区二区三区L| 91精品视频网站| 91国内揄拍国内精品对白不卡| 久久久久久国产精品无码超碰| 91精品美女在线| 久久香蕉国产线看观看精品yw| 亚洲国产成人久久精品99| 精品亚洲一区二区三区在线观看| 91精品国产自产在线观看| 国产精品视频分类一区| 精品人妻久久久久久888| 亚洲国产精品无码久久一线| 亚洲国产精品无码久久青草| 欧美精品人爱a欧美精品| 国产亚洲精品无码拍拍拍色欲| 国产成人无码精品久久久久免费| 久久福利青草精品资源站| 国产91精品在线| 国99精品无码一区二区三区| 国产精品多人p群无码| 国产成人精品一区二区秒拍 |