声明构造函数

属性声明及赋值

静态属性声明及赋值

原型方法及静态方法赋值

将属性和静态属性声明及赋值部分整理成函数

再来一个批量操作属性

将原型方法和静态方法也统一使用一个函数处理

增加一个错误机制

完整代码
"use strict";/**   * 当你使用构造函数(Parent)的 call 的时候   * 判断你传的 实例对象 的原型链上是否存在此构造函数   * 如果不存在则直接报错   */   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);  /**     * 将 prototype 设置为不可重写性质     * 防止直接重写 prototype     *     * Parent.prototype = {...}     */    Object.defineProperty(Constructor, "prototype", { writable: false });  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 Parent = /*#__PURE__*/ (function () {  function Parent() {    _classCallCheck(this, Parent);    _defineProperty(this, "valueA", void 0);    _defineProperty(this, "valueB", "B");  }  _createClass(    Parent,    [      {        key: "func",        value: function func() { }      }    ],    [      {        key: "staticFunc",        value: function staticFunc() { }      }    ]  );  return Parent;})();_defineProperty(Parent, "staticValueA", void 0);_defineProperty(Parent, "staticValueB", "B");