【问题标题】:What are the uses for the bindable and callable pattern?可绑定和可调用模式的用途是什么?
【发布时间】:2014-08-19 19:33:59
【问题描述】:

我以前见过这种小sn-p 代码漂浮,但从来没有真正花时间去思考它的作用。

var bind = Function.bind;
var call = Function.call;

var bindable = bind.bind(bind);
var callable = bindable(call);

我在概念和实践上都了解 .bind.call 的作用,但创建上述 bindablecallbable 函数有什么好处、优势或实际用途?

以下是可绑定用例的上下文示例。

var bound = bindable(db.find, db).apply(null, arguments);
var findable = bindable(db.find, db);
var bound = findable.apply(null, arguments);
var bound = findable(1, 2, 3);

这个模式可以用来做什么?

【问题讨论】:

  • callable 可让您将方法转换为函数。例如,bold=callable("".bold);粗体(123);这使得粗体方法通用:能够处理非字符串。这在使用 [].map 和 [].filter 处理不同内容的集合时非常方便。例如:[1,2,3].map(bold) 而不是 [1,2,3].map(function(a){return String(a).bold(); })
  • 我的另一个最爱:摆脱 jQuery。例如,删除所有锚点:_=callable([].slice); rem=callable(document.body.remove); _(document.querySelectorAll("a")).map(rem);

标签: javascript functional-programming


【解决方案1】:

callable 实际上是

的结果
bind.bind(call);

“执行”总结是,callable 函数让您可以将一个设计为在某些 prototype 对象上作为函数运行的函数,并创建一个新函数,该函数接受要用作 @987654325 的值的参数@。

例如,考虑 Array 原型上的 .slice() 方法。它通常用于将节点列表或arguments 结构之类的东西转换为数组。这通常是这样完成的:

var args = [].slice.call(arguments, 0);

callable 函数让我们可以创建一个类似的独立函数:

var cslice = callable(Array.prototype.slice);

var args = cslice(arguments, 0);

现在,作为某种编程风格的基石,这是否有用,我不会说。

【讨论】:

    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2010-09-11
    • 2016-01-10
    相关资源
    最近更新 更多