function vertexes() {};
vertexes.prototype = [];
vertexes.prototype.add = function (x, y, z) {
this.push(new vertex(x, y, z));
return this[this.length-1];
}
Vertexes是一个包含顶点对象的集合。顶点对象应作为数组访问(顶点[0]是顶点)。上面的代码工作正常。
function vertexes() {};
vertexes.prototype = [];
vertexes.prototype.add = function (x, y, z) {
this[this.length] = new vertex(x, y, z);
return this[this.length-1];
}
但是,上面的代码并不是。声明这个[this.length]时,它总是声明这个[0],并返回undefined。如果vertexes.prototype是一个数组,为什么array.length仅在i .push()元素时才有效?
答案 0 :(得分:4)
这种情况正在发生,因为[]
运算符对实际数组有特殊行为。您正在创建的对象不是数组。
如果尝试使用原型扩展数组,则基本上会有一个普通对象,其中包含Array的方法和默认属性值。使用[]
为其分配值只会导致向其添加属性,并且不会影响其长度。
请注意,通过一些操作, 可以扩展数组,以便使用括号更新长度来为其分配值。它主要涉及实例化实际数组并将自己的方法附加到每个新实例。
补充阅读:http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/