2009-07-29 6 views
3

私はちょうどJavaScriptは私が呼び出したいメソッドは、例えば、似たような、持っていた場合には思っていた、PHPはcall_user_funcを持って知っている:object.set$fieldID($fieldValue)eval()の関数を呼び出すときに、より安全な方法は何ですか?

を/他には/だけで実行するブロックを切り替えると、私はむしろ通じ行かないだろう1行のコードが適切に表示されます。

私が役に立ったら、私はjQueryを使用しています。

答えて

9
object["set" + $fieldID]($fieldValue); 

上記のためのいくつかの読み物:MDCMember Operators

いくつかの高度な方法には、Function.prototype.callFunction.prototype.applyが含まれます。最初はなんでもと同等で、後者はとなり、PHPのcall_user_func_array()に相当します。

PHPの関数とJavaScriptの違いは、JavaScriptではあるオブジェクトのメソッドを別のオブジェクトのコンテキストで呼び出すことができることです。これは、最初の引数call()apply()の使用によって行われます。

上記の例の等価が、call()apply()を使用してこのようになります。最初の引数はobjectそうでない場合、方法は、グローバルオブジェクトにバインドthisポインタで実行される、windowなければならない

object["set" + $fieldID].call(object, $fieldValue); 
object["set" + $fieldID].apply(object, [$fieldValue]); 

ブラウザの場合は

+0

あなたの先生は、ダイヤモンドのおっさんです。ありがとう。 –

4

@lonutが正しい。すべてのオブジェクトがwindowに含まれているので

var foo = function() { alert(1); }; 
window['foo'](); 

:明示的なオブジェクト(例えば:グローバル)の一部ではない関数を呼び出したい場合はより一般的に、しかし、あなたはwindowオブジェクトにそれらを呼び出すことができます。

もう一つの例:

var object = function() { this.method = function() { alert(2); }; } 
var instance = new object(); 
window['instance']['method'](); 
+1

はい、 'window'や' this ['foo'](); '(グローバルオブジェクトの名前が' window'でない場合)を使ってグローバル関数を呼び出すことは便利です。 +1 –

+0

ありがとうございます追加情報:) –