簡體   English   中英

沒有類的ES6子類數組

[英]ES6 Subclass Array without Class

出於興趣,是否可以通過舊的原型方法將Array子類化? 如果有任何引擎支持,理論上類似以下的內容是否可行?

function SubArray() {
    super();
}
SubArray.prototype = Object.create(Array.prototype);
SubArary.prototype.constructor = SubArray;
SubArray.prototype.forEachRight ...

不,不可能。 不僅因為super()並非完全是“舊的原型方法”,還因為不允許在構造函數之外使用它:

§14.1.2靜態語義:函數聲明和表達式的早期錯誤

如果FunctionBody Contains SuperCalltrue ,則為語法錯誤。

您需要將Array作為構造函數調用,因此Array.call(this, …)不起作用(與ES5中的方法相同)。 但是,由於Reflect對象,應該可以偽造super()構造函數調用。 我們將使用Reflect.construct

function SubArray() {
    return Reflect.construct(Array, [], SubArray)
}
…

請注意,您需要執行類似的操作

function SubArray() {
    …
}
Reflect.setPrototypeOf(SubArray, Array);
Reflect.setPrototypeOf(SubArray.prototype, Array.prototype);

匹配新的class語義,而不是執行SubArray.prototype = Object.create(Array);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM