有时 array.length 只在 .push() 之后工作(为什么?)
Sometimes array.length only works after .push() (WHY?)
function vertexes() {};
vertexes.prototype = [];
vertexes.prototype.add = function (x, y, z) {
this.push(new vertex(x, y, z));
return this[this.length-1];
}
顶点是包含顶点对象的集合。顶点对象应作为数组访问(顶点[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[this.length]时,它总是声明this[0],并返回undefined。如果 vertexes.prototype 是一个数组,为什么 array.length 只有在 i .push() 一个元素时才起作用?
发生这种情况是因为[]
运算符对实际数组具有特殊行为。您正在创建的对象不是数组。
如果您尝试使用原型扩展数组,则基本上将拥有一个带有 Array 方法和默认属性值的普通对象。使用 []
为其赋值只会导致向其添加属性,而不会影响其长度。
请注意,通过一些微调,可以扩展数组,以便用括号为其分配值会更新长度。它基本上涉及实例化实际数组并将您自己的方法附加到每个新实例。
在这里看到:http://www.bennadel.com/blog/2292-extending-javascript-arrays-while-keeping-native-bracket-notation-functionality.htm
延伸阅读:http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/
相关文章:
- 为什么这在IE中的工作方式与在Firefox中不同
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 有时 array.length 只在 .push() 之后工作(为什么?)
- Javascript don'刷新页面后无法工作-为什么
- Jquery简单脚本只能在本地工作.为什么?像Javascript翻译
- 可以't让jQuery循环插件工作为什么
- jQuery animate()不工作.为什么?
- window.onload没有'I don’我不能一直工作.为什么?
- Rails自动完成可以在父形式中工作,但不能在嵌套形式中工作.为什么
- LESS不能在IE11中工作-为什么
- ECMAScript的承诺.all方法与jQuery.Deferred一起工作.为什么
- 防止LinkButton post回OnClientClick不工作.为什么
- JavaScript toUpperCase不工作.为什么
- html5:帆布.getImageData不能正常工作-为什么
- javascript的内联样式更改不能在移动浏览器(chrome/dolphin/android)上工作:为什么?
- 为什么我的幻灯片不能工作?为什么我的照片消失了
- jQuery验证在服务器中不起作用!在本地工作.为什么?
- 单页导航无法正常工作.为什么
- AJAX: error(已弃用!)工作,而failed不工作.为什么
- d3选择器:可以在代码中工作,但不能在控制台中工作.为什么