【发布时间】:2016-04-20 11:13:08
【问题描述】:
我想继承一个 javascript 数组并将构造函数参数传递给数组。我所拥有的是:
function SubArray(arguments) {
Array.apply(this, arguments);
}
SubArray.prototype = Array.prototype;
测试不表明参数正在传递给数组
var x = new SubArray("One", "Two", "Three");
// Object[]
// x.length = 0
而当我使用数组执行此操作时,我得到了这个
var x = new Array("One", "Two", "Three");
// Object["One", "Two", "Three"]
// x.length = 3
我做错了什么?
【问题讨论】:
-
Array 是一个 DOM 宿主对象,遗憾的是你不能像这样扩展它 :( 如你所见,
.length不会按预期工作,.apply不会按预期工作,您必须创建一个普通的 Array 实例并根据需要向其添加属性 -
你需要 ES6 来继承 Array 对象。它被认为是一个奇特的对象(由于其特殊的
.length属性),在尝试在 ES5 或更早版本中进行子类化时会出现问题。
标签: javascript arrays inheritance prototype