国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

<small id="mwaxu"></small>

      1. <p id="mwaxu"><tbody id="mwaxu"></tbody></p>

        JavaScript進階(二十九): 走近 es6 之 new.target

        這篇具有很好參考價值的文章主要介紹了JavaScript進階(二十九): 走近 es6 之 new.target。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

        一、前言

        源碼閱讀過程中,發(fā)現(xiàn)以下語句

        new.target.prototype
        

        鑒于該語法為es6所有,項目在編譯過程中,控制臺報Unexpected token: punc(.)錯誤。按照常規(guī)處理,應(yīng)用babel-loader即可解決此類問題。在.babelrc

        {
        	"presets": [
        		["es2015"]
        	]
        }
        

        經(jīng)過實踐發(fā)現(xiàn),build階段依舊報錯。

        故采用第二套解決方案,使用es5語法重寫es6。

        二、new.target 重寫

        es5的構(gòu)造函數(shù)前面如果不用new調(diào)用,this指向window,對象的屬性就得不到值了,所以之前都要在構(gòu)造函數(shù)中通過判斷this是否使用了new關(guān)鍵字來確保普通的函數(shù)調(diào)用方式都能讓對象復(fù)制到屬性。

         1     function Person( uName ){
         2         if ( this instanceof Person ) {
         3             this.userName = uName;
         4         }else {
         5             return new Person( uName );
         6         }
         7     }
         8     Person.prototype.showUserName = function(){
         9         return this.userName;
        10     }
        11     console.log( Person( 'ghostwu' ).showUserName() );
        12     console.log( new Person( 'ghostwu' ).showUserName() );
        

        es6中,為了識別函數(shù)調(diào)用時,是否使用了new關(guān)鍵字,引入了一個新的屬性new.target:

        1. 如果函數(shù)使用了new,那么new.target就是構(gòu)造函數(shù);

        2. 如果函數(shù)沒有使用new,那么new.target就是undefined;

        3. es6的類方法中,在調(diào)用時候,使用new,new.target指向類本身,沒有使用new就是undefined;

        1         function Person( uName ){
        2             if( new.target !== undefined ){
        3                 this.userName = uName;
        4             }else {
        5                 throw new Error( '必須用new實例化' );
        6             }
        7         }
        8         // Person( 'ghostwu' ); //報錯
        9         console.log( new Person( 'ghostwu' ).userName ); //ghostwu
        

        使用new之后,new.target就是Person這個構(gòu)造函數(shù),那么上例也可以用下面這種寫法:

         1         function Person( uName ){
         2             if ( new.target === Person ) {
         3                 this.userName = uName;
         4             }else {
         5                 throw new Error( '必須用new實例化' );
         6             }
         7         }
         8         
         9         // Person( 'ghostwu' ); //報錯
        10         console.log( new Person( 'ghostwu' ).userName ); //ghostwu
        
         1         class Person{
         2             constructor( uName ){
         3                 if ( new.target === Person ) {
         4                     this.userName = uName;
         5                 }else {
         6                     throw new Error( '必須要用new關(guān)鍵字' );
         7                 }
         8             }            
         9         }
        10 
        11         // Person( 'ghostwu' ); //報錯
        12         console.log( new Person( 'ghostwu' ).userName ); //ghostwu
        

        上例,在使用new的時候, new.target等于Person。

        掌握new.target之后,接下來,我們用es5語法改寫上文中es6的類語法。文章來源地址http://www.zghlxwxcb.cn/news/detail-714807.html

         1         let Person = ( function(){
         2             'use strict';
         3             const Person = function( uName ){
         4                 if ( new.target !== undefined ){
         5                     this.userName = uName;
         6                 }else {
         7                     throw new Error( '必須使用new關(guān)鍵字' );
         8                 }
         9             }
        10 
        11             Object.defineProperty( Person.prototype, 'sayName', {
        12                 value : function(){
        13                     if ( typeof new.target !== 'undefined' ) {
        14                         throw new Error( '類里面的方法不能使用new關(guān)鍵字' );
        15                     }
        16                     return this.userName;
        17                 },
        18                 enumerable : false,
        19                 writable : true,
        20                 configurable : true
        21             } );
        22 
        23             return Person;
        24         })();
        25 
        26         console.log( new Person( 'ghostwu' ).sayName() );
        27         console.log( Person( 'ghostwu' ) ); //沒有使用new,報錯
        

        三、拓展閱讀

        • 《JavaScript進階(二十六):ES各版本特性詳解》

        到了這里,關(guān)于JavaScript進階(二十九): 走近 es6 之 new.target的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

        本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

        領(lǐng)支付寶紅包贊助服務(wù)器費用

        相關(guān)文章

        • JavaScript ES6實現(xiàn)繼承

          JavaScript ES6實現(xiàn)繼承

          1 對象的方法補充 2 原型繼承關(guān)系圖 3 class方式定義類 4 extends實現(xiàn)繼承 5 extends實現(xiàn)繼承 6 多態(tài)概念的理 function 創(chuàng)建的名稱如果開頭是大寫的,那這個創(chuàng)建的不是函數(shù),是創(chuàng)建了類。 可以把class創(chuàng)建的類當做是function創(chuàng)建的類的一種語法糖。但是在直接使用的方面是有不同之處

          2024年02月16日
          瀏覽(27)
        • 【JavaScript】數(shù)組方法 (ES6)

          arr.find(callback) 用于獲取第 1 個符合要求的元素: callback : (item, index, arr) = boolean item -當前值、 index -當前索引、 arr -當前數(shù)組 返回值: callback 第一次返回 true 的對應(yīng) item ;如果沒有符合的元素,則返回 undefined arr.findIndex(callback) 用于獲取第 1 個符合要求的元素的下標: cal

          2024年02月14日
          瀏覽(27)
        • 【ES6】JavaScript中的Symbol

          【ES6】JavaScript中的Symbol

          Symbol是JavaScript中的一種特殊的、不可變的、不可枚舉的數(shù)據(jù)類型。它通常用于表示一個唯一的標識符,可以作為對象的屬性鍵,確保對象的屬性鍵的唯一性和不可變性。 Symbol.for()是Symbol的一個方法,它用于創(chuàng)建一個已經(jīng)注冊的Symbol對象。當使用Symbol.for()創(chuàng)建Symbol對象時,會

          2024年02月10日
          瀏覽(28)
        • JavaScript 之 ES6 新特性

          在ES6中,模塊化成為了JavaScript的標準特性。ES6模塊化提供了一種更加優(yōu)雅和可維護的方式來組織和管理JavaScript代碼,可以有效地避免全局變量的污染和命名沖突的問題。以下是ES6模塊化的一些主要特性: 導(dǎo)出(export): 可以通過 export 將一個變量、函數(shù)或類導(dǎo)出為一

          2024年02月07日
          瀏覽(26)
        • JavaScript Es6_3筆記

          了解構(gòu)造函數(shù)原型對象的語法特征,掌握 JavaScript 中面向?qū)ο缶幊痰膶崿F(xiàn)方式,基于面向?qū)ο缶幊趟枷雽崿F(xiàn) DOM 操作的封裝。 了解面向?qū)ο缶幊痰囊话闾卣?掌握基于構(gòu)造函數(shù)原型對象的邏輯封裝 掌握基于原型對象實現(xiàn)的繼承 理解什么原型鏈及其作用 能夠處理程序異常提升程

          2024年02月11日
          瀏覽(23)
        • JavaScript版本ES5/ES6及后續(xù)版本

          JavaScript版本ES5/ES6及后續(xù)版本

          Brendan Eich在短短10天內(nèi)創(chuàng)建了JavaScript的第一個版本。它被稱為摩卡,但已經(jīng)具備了現(xiàn)代JavaScript的許多基本特性! 為了吸引Java開發(fā)人員,Mocha先是更改為LiveScript,然后又更改為JavaScript然而,JavaScript與Java幾乎沒有任何關(guān)系; 微軟推出了IE,從網(wǎng)景復(fù)制JavaScript,并稱之為JScript; 由

          2024年02月13日
          瀏覽(33)
        • 【Javascript】ES6新增之類的認識

          在現(xiàn)代編程語言中,類是面向?qū)ο缶幊谭妒街械暮诵母拍钪弧?與函數(shù)類似,類本質(zhì)上是一種特殊的函數(shù),它允許我們將數(shù)據(jù)和操作封裝在一起,以創(chuàng)建具有共同行為和狀態(tài)的對象。 在類的世界里,我們有類表達式和類聲明,它們各自具有自己的特性和用途。 ? 類本質(zhì)上是

          2024年02月13日
          瀏覽(25)
        • JavaScript之ES6高級語法(一)

          JavaScript之ES6高級語法(一)

          本文是我在學(xué)習(xí)過程中記錄學(xué)習(xí)的點點滴滴,目的是為了學(xué)完之后鞏固一下順便也和大家分享一下,日后忘記了也可以方便快速的復(fù)習(xí)。 今天學(xué)習(xí)的主要是關(guān)于ES6新語法知識的理解和應(yīng)用 棧負責(zé)存放簡單數(shù)據(jù)類型,堆負責(zé)存放復(fù)雜數(shù)據(jù)類型,但是復(fù)雜數(shù)據(jù)類型會把內(nèi)容存在

          2024年02月09日
          瀏覽(24)
        • JavaScript:ES6中類與繼承

          在JavaScript編程中,ES6引入了一種更現(xiàn)代、更清晰的方式來定義對象和實現(xiàn)繼承,那就是通過類和繼承機制。本文將以通俗易懂的方式解釋ES6中類與繼承的概念,幫助你更好地理解和應(yīng)用這些特性。 1. 類的創(chuàng)建與使用 類是一種模板,用于創(chuàng)建對象。在ES6中,我們可以使用 cl

          2024年02月13日
          瀏覽(25)
        • JavaScript學(xué)習(xí)筆記01(包含ES6語法)

          Js 最初被創(chuàng)建的目的是“使網(wǎng)頁更生動”。 Js 寫出來的程序被稱為 腳本 ,Js 是一門腳本語言。 被直接寫在網(wǎng)頁的 HTML 中,在頁面加載的時候自動執(zhí)行 腳本被以純文本的形式提供和執(zhí)行,不需要特殊的準備或編譯即可運行(JIN compiler) Js 不僅可以在瀏覽器中執(zhí)行,也可以在

          2024年02月16日
          瀏覽(31)

        覺得文章有用就打賞一下文章作者

        支付寶掃一掃打賞

        博客贊助

        微信掃一掃打賞

        請作者喝杯咖啡吧~博客贊助

        支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

        二維碼1

        領(lǐng)取紅包

        二維碼2

        領(lǐng)紅包