Ich versuchte Proxy zu erweitern, etwa so:Kann ich Proxy mit einer ES2015-Klasse erweitern?
class ObservableObject extends Proxy {}
ich Babel verwendet es ES5 transpile, und ich habe diesen Fehler im Browser:
app.js:15 Uncaught TypeError: Object prototype may only be an Object or null: undefined
ich auf der Codezeile sah es zeigte auf. Hier ist der Teil des Codes mit Pfeilen auf die beanstandeten Codezeile zeigen:
var ObservableObject = exports.ObservableObject = function (_Proxy) {
_inherits(ObservableObject, _Proxy); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
function ObservableObject() {
_classCallCheck(this, ObservableObject);
return _possibleConstructorReturn(this, Object.getPrototypeOf(ObservableObject).apply(this, arguments));
}
return ObservableObject;
}(Proxy);
Weiß jemand, warum ich diesen Fehler könnte zu bekommen? Ist das ein Fehler in Babel? Was soll passieren, wenn Sie versuchen, den Proxy zu erweitern?
Auf einer Seite zur Kenntnis, umgehen in einer 'prototype' Eigenschaft Patchen diesen' TypeError' in native, non-babel-Implementierungen, aber die Art und Weise, wie "Proxy" scheinbar implementiert wird, überschreibt alle untergeordneten Klassen und lässt nur einen gewundenen Alias für "Proxy" übrig. –
@ AlexanderO'Mara Das ist sehr interessant. Ich bin nicht vertraut genug mit der internen Semantik, um zu verstehen, ob dies eindeutig spezifiziert ist oder ein Implementierungsdetail. Ich setzte '.prototype = null' und testete dies ein wenig. Ihr Unterklassenkonstruktor kann verschiedene Argumente annehmen, und wenn er ein Object zurückgibt, wird das Objekt korrekt anstelle einer Proxy-Instanz erzeugt, so dass der Unterklassenkonstruktor korrekt verwendet wird. Ich denke, wir können erfolgreich eine Unterklasse von Proxy erstellen, aber es gibt keine Möglichkeit für die Unterklasse, das Verhalten ihrer Instanzen aufgrund der exotischen Behaviours tatsächlich zu modifizieren. –
I * think * Dies hängt damit zusammen, wie ein JavaScript-Konstruktor ein Objekt zurückgeben kann, das sich von dem impliziten 'this 'unterscheidet. Wenn ein Elternkonstruktor dies tut, ersetzt dieses Objekt 'this ', wenn die Unterklasse super aufruft und die Vererbung im Grunde genommen verworfen wird. Ich vermute also, dass Proxy das im Grunde unter der Haube macht. –