在JavaScript中实现Array上的函数

时间:2012-11-07 08:36:14

标签: javascript arrays

我对我写的JS脚本得到了一个非常奇怪的回应。我对JS有点新意,所以我对改变现有类(在本例中为Arrays)了解不多。

我希望我能正确地做到这一点,但这里是我试图运行的代码的JSFiddles(显着抽象,但我相信我已经包含了所有相关部分)

http://jsfiddle.net/UMHn5/

我认为问题在于我不知道如何正确地改变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'`

3 个答案:

答案 0 :(得分:3)

当您循环浏览strokes成员时,您将获得密钥01"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/

你没有把小说包括在内。