0

これが問題のオブジェクトであることが保証されているオブジェクトプロトタイプ関数のハンドルを取得するjavascriptの方法はありますか? 特に、適切なタイプのオブジェクトの配列をそのような関数にマップしたいときに、PITA の状況に陥りました。これは最終的にウィンドウになりました。はい、関数自体を適切な場所から取得しましたが、内部的には「this」を参照しています。call と apply については知っていますが、この種の状況を処理するためにそれらをどのように使用するかはわかりません。

マップを使用する代わりに、明示的なループの短い方法はありますか? 奇妙なことに、それはどうやら「これ」に関して同じことをしないようです

object_with_the_prototype.some_prototype_function() 

代わりに私が持っているならそうするでしょう

[object_with_the_prototype].map(this.some_prototype_function)

どうして?

4

3 に答える 3

0

ああ、私はそれを参照してください。問題は、配列の場合、マップ先の明示的な関数を与えていたにもかかわらず、オブジェクトからそのプロトタイプチェーンまでの通常のウォークが発生すると誤って想定していたことです。配列から要素を取得する関数を定義し、その要素を介して目的のプロトタイプ関数を呼び出すことで修正しました。代わりにその関数にマップします。

function do_one(element) {element.some_prototype_function()}
[object_with_prototype].map(do_one)
于 2013-07-11T02:41:50.663 に答える
0

メソッドが 1 つの引数を想定している場合、それは簡単です。複数の引数が必要な場合、またはさらに重要なことに、2 番目の引数として数値ではなく (.toString を考えてください)、bind を使用してこれを 1 番目の引数にカリー化できます。

"a,b,c".split(",").map( Function.call.bind(  "".big  )  );

あなたのコードで:

[object_with_the_prototype]
  .map( Function.call.bind( thisObject.some_prototype_function ) );

メソッドが x(a,b,c) のように呼び出す場合、バインドされた関数は x(this, a, b, c) のように呼び出します

于 2013-07-11T02:27:27.013 に答える
0

私はあなたがこれを探していると思います:

[object_with_the_prototype].map(function(thisObject) {
    thisObject.some_prototype_function();
} );
于 2013-07-11T02:28:34.107 に答える