请查看此代码。我需要在elämäntarkoitus上显示一条警告信息“mikä?”使用此代码
window["mikä"]("on")("elämän")("tarkoitus")("?");
我需要编写一个函数或一段代码,以便在执行该代码时显示该警告消息。
我写了这样一个函数:
window["mikä"] = function(str){
alert(str);
}
当我调用窗口“mikä”时有效但如果我在控制台中添加更多如下所示,则会看到类型错误。
window["mikä"]("on")("Hello")("How");
我的问题是,因为有多个功能标志,它会像下面这样调用吗?
window["mikä"]("on")("elämän")("tarkoitus")("?")
答案 0 :(得分:1)
要实现您正在寻找的功能,一种方法是编写一个函数,该函数返回一个函数,该函数返回一个函数,如同其他提到的那样。如果事先知道函数的数量,这可以正常工作。另一种方法是使用名为currying的函数式编程技术,即
将带有多个参数(或参数元组)的函数的求值转换为评估函数序列的技术,每个函数都有一个参数(部分应用程序)。
您可以像这样编写自己的咖喱功能:
function curry(func, args_) {
var self = this;
self.args = args_ || [];
return function() {
var extended_args = [].concat(self.args).concat(Array.slice(arguments));
if(extended_args.length >= func.length)
return func.apply(this, extended_args);
return new curry(func, extended_args);
};
}
var funcName = "mikä";
window[funcName] = curry(functionstr1, str2, str3, str4) {
alert(funcName + ' ' + str1 + ' ' + str2 + ' ' + str3 + str4);
});
window["mikä"]("on")("elämän")("tarkoitus")("?");
如果您有兴趣了解有关JS中的currying /函数编程的更多信息,可以使用以下资源。
http://kukuruku.co/hub/javascript/an-interesting-task-for-an-interview-currying-and-partial-applicationof-a-function http://tech.pro/tutorial/2011/functional-javascript-part-4-function-currying Reginald Braithwaite's talk in NDC Oslo
答案 1 :(得分:0)
您希望返回值也是一个函数,因此对返回值的其他调用将调用相同的函数。只需添加此
window["mikä"] = function(str){
alert(str);
return window["mikä"];
}
编辑:误读了您的问题,这将发出多条警报消息。遗憾。
答案 2 :(得分:0)
您可能希望嵌套函数调用
window["mikä"] = function(s1){
return function(s2) {
return function(s3) {
alert(s1 + ' ' + s2 + ' ' + s3);
}
}
}
window["mikä"]("on")("elämän")("tarkoitus")("?");

至于在函数中获取函数名称,确实没有好办法,应该避免使用。