在JS

时间:2017-07-13 13:47:45

标签: javascript

我是JS的新手,我只是尝试了一些东西,我想知道以下是否可行。

我想将多个功能添加到一个中。我的函数存储在一个对象(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我想获得所有三个功能的输出。

5 个答案:

答案 0 :(得分:0)

不可能用JS或我所知的任何其他语言。

这里的问题是没有可接受的添加两个功能的方法。更简单的例子是:

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

所以在这种情况下,c只是没有任何意义。这是一个功能吗?如果是,它需要什么参数?多少?如果是这样,它会做什么?它执行a和b吗?如果是的话,它是如何做到的?在这方面可以提出更多问题。

答案 1 :(得分:0)

不,你不能把两个功能加在一起。我认为你将获得的最好成绩是

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

答案 2 :(得分:0)

您可以执行以下操作:

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 ]
})

这会将函数ab附加到myObj.fnc

答案 3 :(得分: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();

答案 4 :(得分:0)

如果您想覆盖 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'