webpack+babel打包出的class是怎么个实现

某天突然想看看ES6的class是怎么个实现法,就随便写了个简单的例子试了试,先看例子

// add.js
export default class Add {
  add(a, b) {
    return a + b;
  }

  minus(a, b) {
    return a - b;
  }

  static hah() {
    console.log("hah");
  }
  
  static test = 5;

  val = 2;
}

Add.nihao = function() {
  console.log("nihao");
};


//main.js

import Add from "./add";
console.log(new Add().add(1, 3));

我们用webpack打包编译(babel 7.0.0),@babel/plugin-proposal-class-properties不知道有没有关系

得到的结果如下,Add上面定义的成员变量、静态变量都通过_defineProperty来定义,成员函数定义到prototype上面,静态函数定义到构造函数上,总的来说比较清晰简洁

"use strict";

function _classCallCheck(instance, Constructor) {
  if (!(instance instanceof 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 Add =
  function () {
    function Add() {
      _classCallCheck(this, Add);

      _defineProperty(this, "val", 2);
    }

    _createClass(Add, [{
      key: "add",
      value: function add(a, b) {
        return a + b;
      }
    }, {
      key: "minus",
      value: function minus(a, b) {
        return a - b;
      }
    }], [{
      key: "hah",
      value: function hah() {
        console.log("hah");
      }
    }]);

    return Add;
  }();

_defineProperty(Add, "test", 5);

Add.nihao = function () {
  console.log("nihao");
};

console.log(new Add().add(1, 3));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值