2017-07-13 5 views
0

私はJSを初めて使っています。私はいくつかのことを試しています。次のことが可能かどうかを知りたいと思います。JS内で複数の関数を追加する

複数の関数を1つに追加したいと考えています。私の関数はオブジェクト(functionObj)に格納されており、それらをメインオブジェクトに追加したいと思います。入力(=文字列)に依存する文字数。

myObj.fnc = function(){ console.log('defaultfunction'); 

functionObj = { 
a: function(){ console.log('dostuff')}, 
b: function(){ console.log('dootherstuff');}, 
//morefunctions 
} 

// input something like 'a b' 
function callmethods(fncstrings){ 
var functions = fncstrings.split(" "); 
for (var f in functions){ 
myObj.fnc += functionObj[functions[f]]; //this does obviously not work 
} 

私はmyObj.fncを呼び出す場合、私はすべての3つの関数の出力を取得したいです。

+3

このポイントは何、脆いコードを作るほか:それはこのような何かを見てね

? – Amy

+1

学習することによって – woodyplz

+0

@woodyplz答えを受け入れることを忘れないでください。 – eddyP23

答えて

0

あなたが正しく質問していると分かった場合、このようなことをすることができます。

0

私が知っているJSや他の言語では不可能です。

ここでの問題は、2つの機能を追加するという受け入れ方がないことです。より簡単な例は次のようになります。

var a = function(x) { console.log(x) }; 
var b = function(y, z) { console.log(y+z) }; 
var c = a + b; 

この場合、Cはちょうど意味を成しません。それは機能ですか?はいの場合は、どのパラメータが必要ですか?幾つ?もしそうなら、それは何をしますか? aとbを実行しますか?はいの場合、どうしますか?この点についてもっと多くの質問をすることができます。

0

いいえ、2つの機能を一緒に追加することはできません。これはmyObj.fncに機能abを追加します

let myObj = {} 
myObj.fnc = {} // Make it an object 

functionObj = { 
    a : function() { console.log('dostuff') }, 
    b : function() { console.log('dootherstuff'); }, 
    // more functions 
} 

Object.keys(functionObj).forEach(funcName => { // This will iterate over ["a","b"] 
    myObj.fnc[ funcName ] = functionObj[ funcName ] 
}) 

:私はあなたが得ようとしている最高のあなたはのような何かを行うことができます

function callmethods(fncstrings){ 
    var functions = fncstrings.split(" "); 
    for (var f in functions){ 
     functionObj[functions[f]](); 
    } 
} 
0

だと思います。

0

var myObj = {} 
 

 
myObj.fnc = function(){ console.log('defaultfunction')}; 
 

 
var functionObj = { 
 
    a: function(){ console.log('dostuff')}, 
 
    b: function(){ console.log('dootherstuff')} 
 
}; 
 

 
// input something like 'a b' 
 
function callmethods (fncstrings) { 
 
    fncstrings.split(" ").forEach(function(name) { 
 
     var fn = functionObj[name], 
 
     prev = myObj.fnc; 
 

 

 
     myObj.fnc = function() { 
 
     var out = prev.apply(this, arguments) 
 
     fn.apply(this, arguments); 
 

 
     return out; 
 
     }; 
 

 
    } 
 
); 
 
} 
 

 

 
callmethods('a b'); 
 

 
myObj.fnc();

あなたがはい、することができます myObj.fncの値を上書き に欠けている場合は、しかし、あなたはそれを私の連結機能を実行しないでください。 abなどの機能をすべて呼び出す新しい関数を作成するだけです。

var myObj = {}; 
myObj.fnc = function(){ console.log('defaultfunction') }; 

functionObj = { 
    a: function(){ console.log('a')}, 
    b: function(){ console.log('b')}, 
    c: function(){ console.log('c')} 
}; 

// input something like 'a b', rewrites myObj.fnc 
function callmethods(function_strings){ 
    var functions = function_strings.split(" "); 
    functions = functions.map(function(c) { 
    return functionObj[c] 
    }); 

    myObj.fnc = function() { 
    functions.forEach(function(fn) { 
     fn(); 
    }); 
    } 
} 
myObj.fnc(); // Outputs 'defaultfunction' 

callmethods('a b'); // Doesn't output anything yet, overwrites `myObj.fnc` 

myObj.fnc(); // Outputs 'a' and 'b' 

callmethods('b c'); // Doesn't output anything yet, overwrites `myObj.fnc` 

myObj.fnc(); // Outputs 'b' and 'c' 
関連する問題