我想了解在实践中使用JavaScript中的功能样式的方法。我创建了一组简单的函数来处理字符串,但是我觉得我在做概念上的错误,因为它看起来就像命令式的风格,即使我不改变输入并且不改变应用程序中的应用程序状态功能。功能样式中应用于字符串的函数序列
下面是它的外观:
var LineParser = require('../modules/LineParser');
var inputLine = 'A line with multiple spaces';
var outputLine = LineParser().formatSpaces(inputLine);
// 'A line with multiple spaces'
outputLine = LineParser().capitalize(outputLine);
// 'A Line With Multiple Spaces'
outputLine = LineParser().formatSomethingElse(outputLine);
// Some more formatting, then do further processing with outputLine
如果我使用回调运行序列,它要真正迅速成为一个丑陋的组嵌套回调的时候我也有,比如说,10种简单的处理功能。
如果我添加方法链,原型方法的思想也会反对功能风格,因为链中的函数将取决于之前的状态,而不仅仅取决于它们的输入。
我该怎么做才能让它在功能风格上看起来更漂亮?
更新:经过深入研究,我发现主题名为Function Composition。这似乎是解决问题的恰当办法,也是功能性世界的基本内容之一。 下面是我用撰写多种功能为一体的功能:
var compose = function() {
var funcs = arguments;
return function() {
var args = arguments;
for (var i = funcs.length; i-- > 0;) {
args = [funcs[i].apply(this, args)];
}
return args[0];
};
};
然后我做的组成:
var composedFunction = compose(func1, func2, ..., funcn)
从右边跑到左边和所有工作得很好。
你是什么意思“*如果我使用回调*运行序列”?为什么要这么做?你的字符串是否是异步的? – Bergi
我不明白为什么原型方法会违反功能风格。作为方法,他们可能以非常规的语法获得第一个参数(对象),但它们也只是函数。它们以不变对象的方式工作。 – Bergi
为什么'LineParser'是一个函数,你为什么需要调用它,它有什么作用? – Bergi