Javascript函数调用就像somefunction(“Hi”)(“Hello”)(“How”)

时间:2014-09-24 19:09:52

标签: javascript function window

请查看此代码。我需要在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")("?") 

3 个答案:

答案 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")("?");




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