私はスタックの終わりを調べるためのショートカットメソッドを定義したいと思います。BabelのArrayクラスをどのように拡張できますか?
Firefoxで次のような作品:
const Stack = class extends Array {
last() {
return this[this.length - 1];
}
}
しかし、バベルでこれをコンパイルした後、それは動作しません:
var Stack = function (_Array) {
_inherits(Stack, _Array);
function Stack() {
_classCallCheck(this, Stack);
return _possibleConstructorReturn(this, Object.getPrototypeOf(Stack).apply(this, arguments));
}
_createClass(Stack, [{
key: 'last',
value: function last() {
return this[this.length - 1];
}
}]);
return Stack;
}(Array);
console.log(Stack.prototype.last); // works
console.log((new Stack()).last); // doesn't work
Array.prototype.last = Stack.prototype.last;
console.log((new Stack()).last); // works
何らかの理由で、私は新しいプロトタイプに関数を追加することができますArrayプロトタイプに直接挿入しない限り、プロトタイプのインスタンスでは使用できません(潜在的な副作用のために明らかに悪い方法です)。
更新:あり(プロキシオブジェクトを含む、またはその代わりにextends
を使用しての手動でのプロトタイプを拡張する)これを回避する方法はいくつかあることが、私のStack
んではない、本当に以来のほとんどを必要とする場合があります配列メソッド、私は今、単にラッパーを使用しています。
const Stack = class {
constructor(...x) {
this.arr = [...x];
}
pop() {
return this.arr.pop();
}
push(...x) {
return this.arr.push(...x);
}
top() {
return this.arr[this.arr.length - 1];
}
size() {
return this.arr.length;
}
}
そうな重複:[バベルとES6に内蔵された原住民の拡張](http://stackoverflow.com/questions/33832646/extended-built-in-es6-with-babel) – jfriend00
NodeJSはここで赤字だったことが判明しました。最新バージョンでは正常にサポートされています。 Babelの出力は、ブラウザまたはノードでは機能しません。 –