我对我写的JS脚本得到了一个非常奇怪的回应。我对JS有点新意,所以我对改变现有类(在本例中为Arrays)了解不多。
我希望我能正确地做到这一点,但这里是我试图运行的代码的JSFiddles(显着抽象,但我相信我已经包含了所有相关部分)
我认为问题在于我不知道如何正确地改变Array类,因为当我删除"删除"更改了Array.prototype,我得到了一个不同的错误(Arrays没有删除函数)。
我得到的例外情况如下:
`Uncaught TypeError: Object function (from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
} has no method 'shift'`
答案 0 :(得分:3)
当您循环浏览strokes
成员时,您将获得密钥0
,1
和"remove"
。当您使用第三个密钥时,您会得到strokes["remove"]
(与strokes.remove
相同),这将返回您添加到数组原型中的remove
方法,并且您会收到该错误。
循环遍历数组的索引而不是数组的成员:
for (var i = 0; i < strokes.length; i++) {
strokes[i].shift(.05);
}
答案 1 :(得分:1)
for (sn in strokes)
中的,sn
分配给'删除'时出错,strokes[sn]
的值是您添加到数组而不是笔画实例的函数。
更改为
for (var i = 0; i < strokes.length; i++) {
strokes[i].shift(.05);
}
或首先测试类型
if (typeof strokes[sn] != 'function') {
...
}
答案 2 :(得分:0)
试试这个:
for (var i = 0; i < strokes.length; i++) {
strokes[i].shift(.05); //Where I'm getting the error
}
jsFiddle:http://jsfiddle.net/UMHn5/2/
你没有把小说包括在内。