Я пытался продлить прокси, например, так:Могу ли я продлить прокси с классом ES2015?
class ObservableObject extends Proxy {}
Я использовал Бабеля, чтобы transpile его ES5, и я получил эту ошибку в браузере:
app.js:15 Uncaught TypeError: Object prototype may only be an Object or null: undefined
Я смотрел на строку кода он указал на. Вот та часть кода со стрелками, указывающими на ошибочную строку кода:
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);
Кто-нибудь знает, почему я мог бы получить эту ошибку? Это ошибка в Вавилоне? Что должно произойти, когда вы пытаетесь расширить прокси?
На стороне записки, заплат в 'prototype' собственности будет обойти этот' TypeError' в но не в стиле babel, но способ «Proxy», по-видимому, реализуется, перезаписывает любые дочерние классы, оставляя вам только пронумерованный псевдоним для 'Proxy'. –
@ AlexanderO'Mara Это очень интересно. Я недостаточно знаком с внутренней семантикой, чтобы понять, четко ли это указано или детали реализации. Я установил '.prototype = null' и немного протестировал это. Конструктор вашего подкласса может принимать разные аргументы, и если он возвращает объект, который будет правильно создан Объект, вместо экземпляра Proxy, поэтому конструктор подкласса используется должным образом. Я думаю, что мы можем успешно создать подкласс Proxy, но подкласс не может реально изменять поведение его экземпляров из-за экзотических ситуаций. –
Я * думаю * это связано с тем, как конструктор JavaScript может возвращать объект, отличный от неявного 'this'. Если родительский конструктор делает это, то этот объект заменяет 'this', когда подкласс вызывает супер и наследование в основном выбрасывается. Поэтому я подозреваю, что Proxy в основном работает под капотом. –