gpt4 book ai didi

JavaScript ES2015 动态继承与 browserify 和 babelify

转载 作者:行者123 更新时间:2023-11-28 18:33:34 26 4
gpt4 key购买 nike

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

我需要用额外的功能“构造函数”包装一个类“前驱”,并且我不知道前驱将是什么,所以我不知道参数的数量或有关其执行的任何信息。

通常,对于 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]);(数组中的数组)。

  1. 我尝试删除 super 并直接使用 Predecessor.apply(this, argument); 但它会抛出错误(必须调用 super)。另外,我不想执行前驱两次。
  2. 出于沮丧,我尝试了 super.apply(arguments),当然,它不起作用(引发捆绑错误)。
  3. 我什至尝试过 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",
    // ...
    }
    }

    最佳答案

    so Predecessor gets executed something like if you did: new Predecessor([arguments]): array within array

    嗯,这就是您所写的:super(arguments) 将整个对象传递给一个参数。您需要编写 super(...arguments) 来传递参数。或者更好的是,不要使用 arguments object ES6 中除了其余参数之外还有更多:

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

    (或者如果您不执行任何其他操作,则省略 constructor 方法,因为这是默认行为)。

    关于JavaScript ES2015 动态继承与 browserify 和 babelify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37514318/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com