有沒有一種方法可以使用Browserify和Babelify與ES2015進行動態繼承?JavaScript ES2015具有browserify和babelify的動態繼承
我需要用額外的功能「構造函數」來包裝一個類「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]);
(arr在陣列中)。
- 我試圖消除超並直接使用
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",
// ...
}
}
「*刪除超級拋出錯誤(」超級必須被調用「)*」 - 這是一個[已知的Babel bug](https://phabricator.babeljs.io/T7248),它應該工作。 – Bergi