2011-10-19 1 views
0

my_varが定義されているときにmy_funcを呼び出さないようにすることを除いて、このコードに相当するものを使用します。私は元の引数( '!')を保持したコードでmy_var()を後で呼び出したいと思います。設定済みの引数を持つ変数に既に定義された関数を割り当てます。

function my_func(first_arg) { 
alert(first_arg); 
}; 
var my_var = my_func('called!'); 

どのようにですか?

答えて

1

Function.prototype.bindのようなものを探しているかもしれません。特定のコンテキストに引数を指定して関数をバインドすることができます。基本的に、それはあなたがこれを行うことができます:

function myFunc(firstArg, secondArg) { 
    alert(firstArg + secondArg); 
}; 

var myVar = myFunc.bind(null, 'called!'); 

myVar(' - from myVar!'); 
// result is alert with -> "called! - from myVar" 

これは、古いブラウザではありませんが、上記のリンクは、この特定のシナリオのために動作させるために、互換性の実装を持っています。

+0

これは私が欲しかったものです。私はこの問題について一日中苦しんでいました:(この文脈でヌルは何を意味しますか?) – zakdances

+0

バインドする最初のパラメータは、関数を呼び出すためのコンテキスト( 'this')を意味します。 'this'を使うと、コンテキストをバインドする必要はありません –

0

新しい機能を作りましょう!

function my_func(first_arg) { 
    alert(first_arg); 
}; 
var my_var = function() { 
    my_func('called!'); 
} 
2

変数が初期化されるときにあなたの関数が呼び出されます(変数は、あなたが望むものではありませんあなたの関数の出力を保持します)。あなたの関数の出力を返す別の関数を作ってみませんか?

function my_func(first_arg) { 
    return function(){alert(first_arg);} 
}; 
var my_var = my_func('called!'); 
0

ジャスト機能を返すように関数が必要:

私は、物事を説明するの苦手はので、ここを凝視するためにいくつかのコードです引数のない無名関数で関数に呼び出しをラップする:

var my_var = new function() { 
    my_func('called!'); 
} 

ECMA bind()の最初のパラメータが結合するので

var my_var = my_func.bind(undefined, 'called!'); 

undefinedがある:スクリプト第5版は、(をカリー化や、より具体的に)部分的なアプリケーションを実装しFunction.bind方法を紹介し、それはあなたがこれを次のように書いてみましょうだろう値はthis "パラメータ"になります)。

Function.bind()は比較的最近になって広く実装されていません。 Mozillaのドキュメントには、ほとんどの機能を利用するための単純なシムが含まれています。 John Resigには部分的なアプリケーションの実装が異なるa blog postもあります。また、多くのJSライブラリの1つで利用可能かもしれません。

1

この希望を実現するための簡単な方法:

var my_var = function() { return my_func('called!'); }; 
+1

JavaScriptには部分関数アプリケーションがあります: 'function.bind'。 –

+0

@Raymondがポインタのおかげで、私はそれを反映する答えを編集しました。 – millimoose

関連する問題