带有browserify和babelify的JavaScript ES2015动态继承

有没有办法使用Browserify和Babelify与ES2015进行动态继承?

我需要用一个额外的功能“构造器”来包装一个类“Predecessor”,我不知道前代将会是什么,所以我不知道参数的数量或者它的执行情况。

通常,对于JS中的动态继承,我会这样做:

function Constructor() {
  Predecessor.apply(this, arguments); // <<-- this is what I'm trying to do.
}
Constructor.prototype = Object.create(Predecessor.prototype);
Constructor.prototype.constructor = Constructor;

当我尝试使用ES2015时:

class Constructor extends Predecessor {
  constructor() {
    super(arguments);
  }
}

super(arguments)被转换为:

var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Singleton).call(this, args));

所以, Predecessor得到执行,如果你这样做: new Predecessor([arguments]); (数组内的数组)。

  • 我尝试删除超级并使用Predecessor.apply(this, arguments); 直接,但它会抛出一个错误( super必须被调用)。 另外,我不想两次执行Predecessor。
  • 我尝试super.apply(arguments)出于挫折,当然,它不起作用(抛出一个包错误)。
  • 我甚至尝试了eval(了解它的所有副作用),但没有取得成功,甚至没有办法解决太复杂的解决方案。
  • 我不想强迫开发者说所有的参数都会被包含在数组中,所以:

  • 我的最后一个资源是承担最多的参数:
  • 糟透了,绝对不是最佳做法:

    class Constructor extends Predecessor {
      constructor(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) {
        super(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z);
      }
    }
    

    当然,我不喜欢它。

    那么,它仅仅是Babelify / Babel还是ES2015中不允许的? 有什么我可以做的,以改善这(有助于Babelify)? 或者我应该回去旧的实施?

    如果你想知道我的编译过程:

    {
      // ...
      "scripts": {
        "dist": "./node_modules/browserify/bin/cmd.js ./src/index.js -o ./dist/bundle.js -t [ babelify --presets [ es2015 ] ]",
        // ...
      },
      "devDependencies": {
        "babel-preset-es2015": "^6.9.0",
        "babelify": "^7.3.0",
        "browserify": "^13.0.1",
        // ...
      }
    }
    

    所以Predecessor得到执行,就像你做的那样: new Predecessor([arguments]) :数组中的数组

    那么,这就是你写的: super(arguments)将整个对象传递给一个参数。 你需要写出super(...arguments)来传递参数。 或者更好的是,不要在ES6中使用arguments对象,而是使用其他参数:

    class Constructor extends Predecessor {
      constructor(...args) {
        super(...args);
      }
    }
    

    (或者如果你不做任何事情,就省略constructor方法,因为这是默认行为)。

    链接地址: http://www.djcxy.com/p/32949.html

    上一篇: JavaScript ES2015 dynamic inheritance with browserify and babelify

    下一篇: Es6 React Arrow function behaviour