Ich möchte eine Shortcut-Methode für die Inspektion des Endes eines Stapels definieren.Wie kann ich die Array-Klasse in Babel erweitern?
Folgende Arbeiten in Firefox:
const Stack = class extends Array {
last() {
return this[this.length - 1];
}
}
jedoch danach mit Babel kompilieren, funktioniert es nicht:
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
Aus irgendeinem Grund ich Funktionen auf den neuen Prototyp hinzufügen , aber sie werden nicht für Instanzen dieses Prototyps verfügbar sein, es sei denn, sie werden direkt in den Array-Prototyp eingefügt (was offensichtlich wegen möglicher Nebenwirkungen schlecht ist).
aktualisieren: Es könnte mehrere Möglichkeiten, dies zu umgehen (einschließlich Proxy-Objekte oder den Prototyp erstreckt manuell statt extends
zu verwenden), aber da meine Stack
nicht wirklich Notwendigkeit die meisten der Array-Methoden, verwende ich jetzt einfach einen Wrapper.
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;
}
}
Wahrscheinlich Duplikat: [Erweiterung Einbau-Eingeborenen in ES6 mit Babel] (http://stackoverflow.com/questions/33832646/extending-built-in-natives-in-es6-with-babel) – jfriend00
Es stellte sich heraus, dass NodeJS war hier ein Ablenkungsmanöver - die neueste Version unterstützt es einfach gut. Babels Ausgabe funktioniert nicht im Browser oder Knoten. –