0

重複の可能性:
javascript の Array クラスに関数を追加すると、ループが壊れる

誰かが何かを言う前に、Object.prototype で何かを割り当てることは一般的に悪い習慣であることを知っていますが、このコードのチャンクが含まれている場合、これはすべてのオブジェクトに持たせたいものです。Array でそれを行うと、それが起こっているのも奇妙です。これは Node.js で行われているため、V8 JavaScript エンジンを使用しています。とにかく、ここで何が起こっているのかです。これら2つのタイプのいずれかのプロトタイプに関数を割り当てているだけです(結果と同じエラーで両方を個別に試しましたが、他のタイプを使用すると発生しません)。

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 に答える