我是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
我想获得所有三个功能的输出。
答案 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 ]
})
这会将函数a
和b
附加到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
的值,您可以,但是您不能使用我的连接功能。您只需创建一个新功能即可调用所需的所有a
,b
等功能。
它看起来像这样:
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'