2012-04-14 17 views
6

私は次のコードを持っていて、最後の行をどのように動作させるのかと思っています。私は、現在のuse _viewを名前空間の規則として追加し、むしろarc.view。$ function_nameのようなものを使用するというapiのセットをaddoptedしました。 THXjavascriptウィンドウオブジェクトの関数を呼び出す

​​
+2

あなたのおかげで私は苦労して一日も終わりました...ありがとう+1 –

+0

@vikasdevde :)親指アップ... +1 – agpt

答えて

10
window['arc']['view']['say_hello'](); 

または

window.arc.view.say_hello() 

または

window['arc'].view['say_hello']() 

ドット構文またはブラケット構文のどちらかが動作します。ドットシンタクスは、実際にはブラケットベースのプロパティルックアップの文法的な砂糖なので、上記のコードスニペットはすべて同じです。プロパティ名自体が動的な値である場合、またはドット構文でプロパティ名を使用すると構文エラーが発生する場合は、ブラケット構文を使用します。例えば:あなたが実際にウィンドウ内の関数を実行するための求めている角括弧表記法を使用して

jsFiddle

window["arc"]["view"]["say_hello"](); 
3

このをお試しくださいarc.view.say_helloと呼ばれ、オブジェクトview(これはオブジェクトarcのプロパティ)の関数ではありません。より明示的にするには:

window["arc.view.say_hello"] = function() { alert("hi") }; 

window["arc.view.say_hello"](); // "hi" 

説明したように関数を呼び出すには、オブジェクトチェーンを「解決」する必要があります。そのためのユーティリティ関数を作成することができます。ような何か:

var arc={}; 
arc.view={ 
    say_hello: function(){ 
    alert("I want to say hello"); 
    } 
} 
function say_goodbye(){ 
    alert("goodbye to you"); 
} 

function call(id) { 
    var objects = id.split("."); 
    var obj = this; 

    for (var i = 0, len = objects.length; i < len && obj; i++) 
     obj = obj[objects[i]]; 

    if (typeof obj === "function") 
     obj(); 
} 

call("say_goodbye"); 
call("arc.view.say_hello"); 

ます。またargumentsを使用するために、ユーティリティ機能を拡張することができ(またはあなただけの関数への参照を返すことができます)。

2

var dynamicMethodName = someObject.getMethodName(); 
someOtherObject[dynamicMethodName](); 

または

someOtherObject["a key string with spaces and {special characters}"]();