0

可能重复:
将函数添加到 javascript 的 Array 类中断以进行循环

在任何人说什么之前,我知道用 Object.prototype 分配某些东西通常是不好的做法,但如果包含这段代码,我希望所有对象都拥有这种东西。奇怪的是,当我也使用 Array 进行操作时也会发生这种情况。这发生在 Node.js 中,所以它使用 V8 javascript 引擎。无论如何,这就是发生的事情。我只是将一个函数分配给这两种类型之一的原型(我已经分别尝试了两种类型,但结果与结果相同,当我使用其他类型时不会发生这种情况)。

Array.prototype.test = function() { console.log("test"); }

var a = ["test1", "test2", "test3"],
    index,
    entry;

a.test(); //prints 'test'

for(index in a) {
  entry = (a[index]).split("e"); //throws an error
}

错误是

Object Function () {console.log("test");} has no method 'split'

想法?

4

3 回答 3

0

如果你运行它,你会看到发生了什么,因为你在数组上使用了原型,函数成为对象的一部分,然后拆分会引发错误。

Array.prototype.test = function() { console.log("test"); }

var a = ["test1", "test2", "test3"],
    index,
    entry;

a.test(); //prints 'test'

for(index in a) {
    console.log(index);
    console.log(a);
//  entry = (a[index]).split("e"); //throws an error
}
于 2012-06-21T18:09:57.597 回答
0

您应该使用以下方法迭代该数组:

for(index=0;index<a.length;index++)

因为当您添加成员时,它们会成为数组的一部分,使用

for(i in a) console.log(i);

这将打印所有键以及函数名称“test”

于 2012-06-21T18:11:52.313 回答
0

尝试

varTest = console.log("test");
Array.prototype.test = function() { varTest }

var a = ["test1", "test2", "test3"],
    index,
    entry;

a.test(); //prints 'test'

for(index in a) {
  entry = (a[index]).split("e"); //throws an error
}
于 2012-06-21T18:14:36.037 回答