我試圖擴大代理,像這樣:我可以使用ES2015類來擴展Proxy嗎?
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的實現,但'代理'的方式顯然實現覆蓋任何子類,給你留下一個令人費解的'代理'別名。 –
@ AlexanderO'Mara這非常有趣。我對內部語義不夠熟悉,無法理解這是明確指定的還是實現細節。我設置了'.prototype = null'並測試了一下。你的子類構造函數可以採用不同的參數,並且如果它返回一個Object,該Object將被正確地生成而不是Proxy實例,所以子類構造函數正在被正確使用。我認爲我們可能成功地創建了Proxy的子類,但是由於異國情調,子類無法真正修改其實例的行爲。 –
我*認爲*這與JavaScript構造函數返回與隱式'this'不同的對象的方式有關。如果父類構造函數執行此操作,那麼當子類調用超類並繼承基本上被拋出時,該對象會替換this。所以我懷疑這就是Proxy基本上在做的事情。 –