3

初心者の質問ですが、頭を包み込むのに苦労しています。jqueryを使用すると、次のようなことができます。

$.each(array, testF); 

function testF(){
    console.log(this.name);  
}

$ .eachを使用して、配列を関数testFに渡し、配列の各行に含まれるオブジェクトにアクセスできます。しかし、私が次のようなことをしようとすると:

array[0].testF()

オブジェクトにメソッド'testF'がないことを示すエラーが表示されます。誰かがここで何が起こっているのか説明できるかどうか疑問に思っています...なぜjQueryが機能するのに、2番目は機能しないのか。繰り返しになりますが、初心者の質問を許してください。

4

4 に答える 4

4
  • $.each(array, testF)にバインドさtestF(i, elem)れた配列内の各要素を呼び出します。thiselem
  • array[0].testF()testF()に存在するメソッドを呼び出そうとしますarray[0]

または、単純化できる引数を使用しないため、同等の$.each()機能がありますtestF.call(array[0], 0, array[0])testF.call(array[0])

のドキュメントについては、MDNを参照してください.call()

于 2012-05-13T20:21:37.660 に答える
2

次のようにします。

testF.call( array[0] );

function メソッドを使用すると、関数呼び出しのcallコンテキスト (this値) を設定できます。そのため、カスタム コンテキストを使用して関数を呼び出したい場合は、 の代わりにfn();を実行しますfn.call( context );

于 2012-05-13T20:22:29.107 に答える
1

これは、オブジェクト array[0] に関数 testF がないためです。最初にそれを宣言する必要があります。そのようです:

array[0].testF = function testF()
{
    console.log(this.name);
}

array[0].testF();
于 2012-05-13T20:24:15.307 に答える
1

と書くarray[0].testF()と、これは次のことを意味します。

  • 変数を調べるarray
  • インデックスの下の要素を取る"0"
  • その中、インデックスの下の要素を取得します"testF"
  • thisそしてそれを関数として実行します(また、特殊変数をに割り当てますarray[0]

ただし、ほとんどの場合、array[0]には属性がtestF定義されていません。事前にこれを行う場合:

array[0].testF = testF;

それならうまくいくでしょう。

于 2012-05-13T20:24:48.110 に答える