Babel編譯:類

 

編譯前函數

 

class Fruit{
     static nutrition = "vitamin"
    static plant(){
     console.log('種果樹'); 
    }
    name;
    constructor(name){
      this.name = name;
    }
    hello(){
      console.log(this.name);
    }
}

 

編譯後ui

 

"use strict";

// 是不是實例
function _instanceof(left, right) {
    // 支持Symbol時,right能夠是函數/對象:Symbol.hasInstance指向一個內部方法。
    if (
        right != null &&
        typeof Symbol !== "undefined" &&
        right[Symbol.hasInstance]
    ) {
        return !!right[Symbol.hasInstance](left);
    }
    // 不支持Symbol時,right必須是函數
    else {
        return left instanceof right;
    }
}

// 必須經過new運算符,調用構造函數
function _classCallCheck(instance, Constructor) {
    if (!_instanceof(instance, Constructor)) {
        throw new TypeError("Cannot call a class as a function");
    }
}

// 添加一組成員方法
function _defineProperties(target, props) {
    for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        if ("value" in descriptor) descriptor.writable = true;
        Object.defineProperty(target, descriptor.key, descriptor);
    }
}

// 建立類
function _createClass(Constructor, protoProps, staticProps) {
    // 類的實例方法:做爲構造函數的原型的屬性
    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
    // 類的靜態方法:做爲構造函數的屬性
    if (staticProps) _defineProperties(Constructor, staticProps);
    return Constructor;
}

// 添加一個屬性
function _defineProperty(obj, key, value) {
    if (key in obj) {
        Object.defineProperty(obj, key, {
            value: value,
            enumerable: true,
            configurable: true,
            writable: true
        });
    } else {
        obj[key] = value;
    }
    return obj;
}

// 使用當即執行函數,建立類
var Fruit =
    /*#__PURE__*/
    (function () {
        // 類的靜態方法
        _createClass(Fruit, null, [
            {
                key: "plant",
                value: function plant() {
                    console.log("種果樹");
                }
            }
        ]);

        // 類對應的構造函數
        function Fruit(name) {
            // 構造函數調用檢查
            _classCallCheck(this, Fruit);

            // 類的實例屬性:做爲new建立的上下文的屬性
            _defineProperty(this, "name", void 0);

            this.name = name;
        }

        // 類的實例方法
        _createClass(Fruit, [
            {
                key: "hello",
                value: function hello() {
                    console.log(this.name);
                }
            }
        ]);

        return Fruit;
    })();

// 類的靜態屬性:做爲構造函數的屬性
_defineProperty(Fruit, "nutrition", "vitamin");
相關文章
相關標籤/搜索