2017-06-14 11 views
1

Javaと同じことを行い、関数リファレンスをjavascriptの特定のオブジェクトの関数に渡すことはできますか?私がやりたい特定のオブジェクトのインスタンス関数への参照を渡すことはできますか?

_.every(aS, function (value) { 
    return exp.test(value); 
}); 

_.every(aS, exp.test); 

すなわち

は、次のコードを考えてみましょうその特定のtest機能が呼び出されるようにします。

これはjavascriptで可能ですか?


回答:可能です。 chapter 2 of You Don't Know JS: this & Object Prototypesセクション ハードバインディングをご覧ください。

答えて

3

はい、しかしthis参照はexp.text実装内部で正しく動作していることを確認するため、あなたはそれをbindする必要がありますいくつかの機能については

_.every(aS, exp.test.bind(exp)); 

、これは必要ないかもしれません(彼らが使用していないときthis参照)、怪我をすることはありません。

thisの詳細については、How does the this keyword workを参照してください。

+0

[第2章あなたはわからない:この&オブジェクトプロトタイプ](https://github.com/getify/You-Dont-Know-JS/blob/master/this%20 %26%20object%20prototypes/ch2.md)セクション*ハードバインディング*。 – Roland

1

はい、しかし、あなたは少しの理解が必要ですthisはJSで動作します。

基本的に、このようなオブジェクトに関数をバインドする必要があります。

_.every(aS, exp.test.bind(exp)) 

あなたがbindを使用する場合、基本的に、それは関数が呼び出されるに関係なく、thisはいつもあなたが関数に渡すオブジェクトにバインドされていることを確認します。 bindを呼び出さなかった場合、thisは、グローバル・オブジェクトのどの環境にもバインドされますが、ブラウザではwindowとなります。

関連する問題