2012-02-08 9 views
1

私はJSのフレームワークのようなものを作っています。どのように私は他の質問を見て、そして最も評価答えは[functionName]ウィンドウで非グローバル関数を参照するにはどうすればよいですか?

window['functionName'] 

add_action("wp_head", "functionName"); 

しかし、私は、ユーザーがちょうどWordpressのプラグインのように、特定のアクションに機能を追加できるようにしたいです関数 "functionName"がグローバルでないであるが、$(document).ready({})の中に座っている。例えば? Uncaught TypeError:未定義のメソッド 'call'を呼び出すことができない

もう1つのオプションがあります。これは、add_actionの引数としてユーザーの関数を渡すことです(私の関数の名前もadd_action ):

add_action("some_event", functionName); 
// in the framework's JS file: 
function add_action(event, fn) { 
    fn(); 
} 

しかし、私はこれが地獄と間違ったやり方で非効率的であるという愚直さがあります。

+0

他の関数がアクションをトリガするときに実行する一連の関数を追加することを「イベント処理」といいます。 – zzzzBov

+0

これがなぜ投票されなかったのか分かりません... –

+0

あなたは、ユーザが選択できる事前定義された機能のセットを持っているとか、ユーザが何らかの形で独自の機能を定義できると言っていますか? – nnnnnn

答えて

1

最後に、関数を渡す方法が、実際にはそれを実行する最善の方法です。それは非効率的でも間違ったことでもない。

0

できません。

$.yourSpecialFunction = function() { 
    // ... 
}; 

さらに悪いことに、あなたはwindowにそれを追加できます:あなたは絶対にグローバルな機能を持っている必要があります場合は、あなたはjQueryオブジェクトにそれをタックすることができます

window.yourSpecialFunction = function() { 
    // ... 
} 

をしかし行うには理由が本当にありませんそれ。

+0

ここでの解決策は、関数を引数として渡すことです。 –

+0

ああ...何ですか?何に対する議論? – Pointy

1

あなた自身のオブジェクト上でこれらの機能を入れて、document.ready関数内でそれを使用することができます。

$(document).ready(function() { 
    var fns = {}; 
    fns.myFunc = function() {}; 

    // execute the function by name 
    var fnName = "myFunc"; 
    fns[fnName](); 
}); 

それとも、あなたはdocument.ready()のスコープの外でそれを参照したい場合は、次のことができますwindowオブジェクトの上に置くと、それはあなた自身のグローバル名前空間作り:理想的

$(document).ready(function() { 
    window.myFunctionTable = {}; 
    window.myFunctionTable.myFunc = function() {}; 
}); 

// execute the function by name 
var fnName = "myFunc"; 
window.myFunctionTable[fnName](); 
0

、あなたが本当にあなたのアプリを名前空間にしたい - あなたは

のようなものを持っています

またはそれ以外のものを選択し、フレームワーク全体のすべてのメソッド/プロパティ/モジュールをその名前空間に追加します。

関連する問題