Class语法糖

[亡魂溺海] 提交于 2019-12-30 03:41:21

TypeScript源码

class A {
    hello() {
        
    }
}

class B extends A{
    welcome() {
        
    }
}

 

TypeScript编译

var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    }
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var A = /** @class */ (function () {
    function A() {
    }
    A.prototype.hello = function () {
    };
    return A;
}());
var B = /** @class */ (function (_super) {
    __extends(B, _super);
    function B() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    B.prototype.welcome = function () {
    };
    return B;
}(A));

 

Babel源码

lass Auto {
    constructor(type, model) {
        this.type = type;
        this.model = model;
    }
    static hello() {
        
    }
    drive() {

    }
}

class Car extends Auto {
    constructor(type, model,name) {
        super(type, model);
        this.name = name;
    }
    welcome() {

    }
}

let car = new Car('客车','承载式','Cadillac');

 

Babel编译

var _createClass = 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);
        }
    }
    return function(Constructor, protoProps, staticProps) {
        if(protoProps) defineProperties(Constructor.prototype, protoProps);
        if(staticProps) defineProperties(Constructor, staticProps);
        return Constructor;
    };
}();

function _possibleConstructorReturn(self, call) {
    if(!self) {
        throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
    }
    return call && (typeof call === "object" || typeof call === "function") ? call : self;
}

function _inherits(subClass, superClass) {
    if(typeof superClass !== "function" && superClass !== null) {
        throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
    }
    subClass.prototype = Object.create(superClass && superClass.prototype, {
        constructor: {
            value: subClass,
            enumerable: false,
            writable: true,
            configurable: true
        }
    });
    if(superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
}

function _classCallCheck(instance, Constructor) {
    if(!(instance instanceof Constructor)) {
        throw new TypeError("Cannot call a class as a function");
    }
}
var Auto = function() {
    function Auto(type, model) {
        _classCallCheck(this, Auto);
        this.type = type;
        this.model = model;
    }
    _createClass(Auto, [{
        key: 'drive',
        value: function drive()

        {

        }
    }], [{
        key: 'hello',
        value: function hello() {}
    }]);
    return Auto;
}();
var

    Car = function(_Auto) {
        _inherits(Car, _Auto);

        function Car(type, model, name) {
            _classCallCheck(this, Car);
            var _this = _possibleConstructorReturn(this, (Car.__proto__ || Object.getPrototypeOf(Car)).call(this,
                type, model));
            _this.name = name;
            return _this;
        }
        _createClass(Car, [{
            key: 'welcome',
            value: function welcome() {

            }
        }]);
        return Car;
    }(Auto);

var car = new Car('客车', '承载式', 'Cadillac');

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!