0

我正在编写的 JS 脚本得到一个非常奇怪的响应。我对 JS 有点陌生,所以我对更改现有类(在本例中为数组)知之甚少。

我希望我做得正确,但这是我试图运行的代码的 JSFiddles(抽象得很明显,但我相信我已经包含了所有相关部分)

http://jsfiddle.net/UMHn5/

我认为问题在于我不知道如何正确更改 Array 类,因为当我删除 Array.prototype 的“删除”更改时,我得到一个不同的错误(数组没有删除功能) .

我得到的异常如下:

`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'`
4

3 回答 3

3

当您循环访问 的成员时strokes,您将获得密钥01并且"remove"。当您使用您获得的第三个键strokes["remove"](与 相同strokes.remove)时,它将返回remove您添加到数组原型中的方法,并且您会收到该错误。

循环遍历数组的索引而不是数组的成员:

for (var i = 0; i < strokes.length; i++) {
  strokes[i].shift(.05);
}
于 2012-11-07T08:53:55.470 回答
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') {
  ...
}
于 2012-11-07T08:50:07.700 回答
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/

您没有在小提琴中包含原型。

于 2012-11-07T08:39:08.983 回答