【发布时间】:2012-06-01 13:29:05
【问题描述】:
很高兴得知 this way 基本上继承了 JavaScript Array(代码从链接复制):
function SomeType() {
this.push(16);
}
SomeType.prototype = [];
SomeType.prototype.constructor = SomeType; // Make sure there are no unexpected results
console.log(new SomeType()); // Displays in console as [16]
但这并不完全。有没有办法像这样伪造 Array 的子类并获得[] 方法?
var a = [];
a[3] = true;
console.log(a.length); //=> 4
var s = new SomeType();
s[3] = true;
console.log(s.length); //=> 1
这样你在执行for循环时仍然可以将其视为一个数组:
for (var i = 0; i < s.length; i++) {
var item = s[i];
}
【问题讨论】:
-
这是一个问题...我认为没有跨浏览器的方法可以解决它。我想到了两件事:1. 属性 - 不是真正的跨浏览器 2. 只需强制执行
.push,这可行 - 如果可能的话。 -
为什么还需要对数组进行子类化?您可以创建一个数组并仍然为其附加新属性。
标签: javascript arrays browser subclass