• <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
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    解讀ES6中class關鍵字

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

    解讀ES6中class關鍵字

    解讀ES6中class關鍵字:class是es6引入的最重要特性之一。在沒有class之前,我們只能通過原型鏈來模擬類。 1 、介紹 //定義類 class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + this.x + ', '
    推薦度:
    導讀解讀ES6中class關鍵字:class是es6引入的最重要特性之一。在沒有class之前,我們只能通過原型鏈來模擬類。 1 、介紹 //定義類 class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + this.x + ', '

    class是es6引入的最重要特性之一。在沒有class之前,我們只能通過原型鏈來模擬類。

    1 、介紹 

     //定義類
     class Point {
     constructor(x, y) {
     this.x = x;
     this.y = y;
     }
     toString() {
     return '(' + this.x + ', ' + this.y + ')';
     }
     }

      Point類除了構造方法,還定義了一個toString方法。注意,定義“類”的方法的時候,前面不需要加上function這個關鍵字,直接把函數定義放進去了就可以了。另外,方法之間不需要逗號分隔,加了會報錯。  

     //類的數據類型就是函數,類本身就指向構造函數。用的時候,也是直接對類使用new命令,跟構造函數的用法完全一致。
     class Bar {
     doStuff() {
     console.log('stuff');
     }
     }
     var b = new Bar();
     b.doStuff() // "stuff"

    2、嚴格模式

      類和模塊的內部,默認就是嚴格模式,所以不需要使用use strict指定運行模式。只要你的代碼寫在類或模塊之中,就只有嚴格模式可用

    3、constructor 方法

      constructor方法是類的默認方法,通過new命令生成對象實例時,自動調用該方法。一個類必須有constructor方法,如果沒有顯式定義,一個空的constructor方法會被默認添加。    

    class Point {
     }
     // 等同于
     class Point {
     constructor() {}//constructor方法默認返回實例對象(即this),完全可以指定返回另外一個對象。
     }
     //注意:類必須使用new調用,否則會報錯。這是它跟普通構造函數的一個主要區別,后者不用new也可以執行。

    4、類的實例對象

      生成類的實例對象的寫法,使用new命令。

      實例的屬性除非顯式定義在其本身(即定義在this對象上),否則都是定義在原型上(即定義在class上)。    

     class Point {
     // ...
     }
     // 報錯
     var point = Point(2, 3);
     // 正確
     var point = new Point(2, 3);

    5、Class 表達式

      下面代碼使用表達式定義了一個類。需要注意的是,這個類的名字是MyClass而不是Me,Me只在 Class 的內部代碼可用,指代當前類。      

     const MyClass = class Me {
     getClassName() {
     return Me.name;
     }
     };
     //采用 Class 表達式,可以寫出立即執行的 Class。
     var person = new class {
     constructor(name) {
     this.name = name;
     }
     sayName() {
     console.log(this.name);
     }
     }('張三');
     person.sayName(); // "張三"

    6、不存在變量提升

      類不存在變量提升(hoist)

      下面代碼中,Foo類使用在前,定義在后,這樣會報錯,因為 ES6 不會把類的聲明提升到代碼頭部。這種規定的原因與下文要提到的繼承有關,必須保證子類在父類之后定義。

     new Foo(); // ReferenceError
     class Foo {} 

    7、私有方法

      私有方法是常見需求,但 ES6 不提供,只能通過變通方法模擬實現。

      添加私有方法辦法  

        ①在命名上加以區別。

        ②利用Symbol值的唯一性,將私有方法的名字命名為一個Symbol值。      

     /*命名上加以區別*/
     class Widget {
     // 公有方法
     foo (baz) {
     this._bar(baz);
     }
     // 私有方法
     _bar(baz) {
     return this.snaf = baz;
     }
     // ...
     }
     /*利用Symbol*/
     const bar = Symbol('bar');
     const snaf = Symbol('snaf');
     
     export default class myClass{
     // 公有方法
     foo(baz) {
     this[bar](baz);
     }
     // 私有方法
     [bar](baz) {
     return this[snaf] = baz;
     }
     // ...
     };

    8、私有屬性

      與私有方法一樣,ES6 不支持私有屬性。目前,有一個提案,為class加了私有屬性。方法是在屬性名之前,使用#表示。   

     class Point {
     #x;
     constructor(x = 0) {
     #x = +x; // 寫成 this.#x 亦可
     }
     get x() { return #x }
     set x(value) { #x = +value }
     }

    9、this 的指向

      類的方法內部如果含有this,它默認指向類的實例。
      一旦單獨使用該方法,很可能報錯。     

     class Logger {
     printName(name = 'there') {
     this.print(`Hello ${name}`);
     }
     
     print(text) {
     console.log(text);
     }
     } 
     const logger = new Logger();
     const { printName } = logger;
     printName();
     //上面代碼中,printName方法中的this,默認指向Logger類的實例。但是,如果將這個方法提取出來單獨使用,this會指向該方法運行時所在的環境,因為找不到print方法而導致報錯。
     /*解決方法是,在構造方法中綁定this,這樣就不會找不到print方法了。*/
     class Logger {
     constructor() {
     this.printName = this.printName.bind(this);
     } 
     // ...
     }

    10、name 屬性

       由于本質上,ES6 的類只是 ES5 的構造函數的一層包裝,所以函數的許多特性都被Class繼承,包括name屬性。
      name屬性總是返回緊跟在class關鍵字后面的類名。    

     class Point {}
     Point.name // "Point"

    總結

    以上所述是小編給大家介紹的ES6中class關鍵字,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

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

    文檔

    解讀ES6中class關鍵字

    解讀ES6中class關鍵字:class是es6引入的最重要特性之一。在沒有class之前,我們只能通過原型鏈來模擬類。 1 、介紹 //定義類 class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + this.x + ', '
    推薦度:
    標簽: 關鍵字 解讀 class
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲AV永久纯肉无码精品动漫| 蜜臀精品无码AV在线播放| 亚洲国产精品ⅴa在线观看| 久久激情亚洲精品无码?V| 精品国产AⅤ一区二区三区4区 | 亚洲欧美日韩精品| 国产精品成| 亚洲国产精品无码久久久不卡| 久久精品一区二区| 久久国产综合精品五月天| 少妇人妻偷人精品无码视频新浪| 亚洲精品小视频| 久久久国产精品| 欧美成人精品一区二区三区| 国产乱人伦偷精品视频免观看| 国产精品午夜免费观看网站| 午夜一级日韩精品制服诱惑我们这边 | 亚洲国产精品丝袜在线观看| 国产一区精品| 99精品国产一区二区三区| 国产午夜精品久久久久九九| 欧美精品一本久久男人的天堂| 国产精品无码专区| 91精品国产品国语在线不卡 | 国产人妖乱国产精品人妖| 国产精品一在线观看| 天天视频国产精品| 亚洲第一精品福利| 亚洲综合国产精品第一页| 欧美精品第一页| 亚洲欧美日韩国产成人精品影院 | 99久久精品国产综合一区| 亚洲欧美一级久久精品| 四虎成人精品永久免费AV| 国产精品网址在线观看你懂的| 成人精品一区二区三区中文字幕| 精品久久久久久久久久久久久久久| freesexvideos精品老师毛多| 亚洲精品专区在线观看| 免费看一级毛片在线观看精品视频 | 四虎精品8848ys一区二区|