2012-03-10 8 views

答えて

6

もしあなたが、あなたがすでに示されてきた構文はほとんど右である「オブジェクトのプロパティとして機能-オブジェクトを追加」を意味「javascriptオブジェクトに動的に機能を付ける」こともできます。これは、それがどうあるべきかです:あなたはこのようなあなたのattach()機能を呼び出すことができます意味

var fnName = "testFunc"; 
obj[fnName] = function() { alert("Test function"); }; 
// or 
obj.testFunc = function() { ... }; 
// or 
obj[fnName] = nameOfFunctionDefinedElsewhereInCurrentScope; 

// attach an anonymous function: 
attach(obj, "newFunctionName", function() { alert(1); }); 
// attach a function defined elsewhere 
attach(obj, "newFunctionName", someFunction); 

注:attach()機能は本当に実際には、まったく労力を節約しないことただ(これをしない)あなたところで...

を入力するための複数の文字を与え、あなたはcodeとして渡したいパラメータはコードの文字列がある場合は、この操作を行います。

var code = "alert(0);"; 
obj[fnName] = new Function(code); 

詳しい情報は:関数の定義は添付と仮定https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function

+0

'String型の例としてcode'は、私が探していたまさにである、THX :) – munyul

1

、あなたはこのようにそれを呼び出す必要があります:あなたはそれを呼び出した

attach(obj, fnName, function(){ alert(1); }); 

方法が無効な構文です。

obj[fnName] = function(){ alert(1); }); 
+0

おそらくOPは動的に「コードを生成したいです' –

-1

EDIT:あなたは気づいたかもしれないとしても

は、それはあなたがあなたの1行の関数定義を使用して同じことを行うことができるので、非常に便利な機能ではありません他のポストの機能(コード)のソリューションがよりよく表示されます。私はそのコンストラクタについて知らなかった。

可能な解決策は次のようになります。

Object.prototype.attach = function(name,code) { 
    this.name = function() { 
     eval(code); 
    }; 
} 
+0

evalは間違いなく時間を作る電子の複雑さが増した:) –

0

彼らはすでにこことして、定義されてきた場合は、関数オブジェクトとしてそれらを添付することができます:Javascript: better way to add dynamic methods?

ます。また、新しいFunctionコンストラクタを使用することができますCreating functions dynamically in JS

ここで、evalと新しい関数コンストラクタの違いについて説明します。Are eval() and new Function() the same thing?警告、evalを使用()と新しいFunctionコンストラクタとして は、ここのような論争を作成し、個体数で(ある程度)非難されています:Legitimate uses of the Function constructorここ

は詳細情報であり、 evalの:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

ここでは、新しいFunctionコンストラクタの詳細については次のとおりです。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function

関連する問題