javascript - 如何在不执行的情况下使函数可链接?像 `obj.fn.fn` 而不是 `obj.fn().fn()`

标签 javascript method-chaining

我在一个对象中有两个函数

var obj = {};
obj.fn1 = function(){ console.log('obj.fn1'); return this; };
obj.fn2 = function(){ console.log('obj.fn2'); return this; };

我希望能够做到

obj.fn1.fn2()
obj.fn2.fn1()

如何做到这一点?

编辑:fn1fn2 可以是函数或属性访问器,我不在乎,只要它们做事即可。 p>

我在很多图书馆都见过它,比如 chalk color.red.bold('字符串')

最佳答案

如果 fn1fn2obj 都引用了这两个函数,您就可以这样做。 Object.assign (ES6) 在这里提供帮助:

var base = {
  fn1: function fn1() { console.log('fn1'); return this; },
  fn2: function fn2() { console.log('fn2'); return this; }
}

Object.assign(base.fn1, base);
Object.assign(base.fn2, base);
var obj = Object.assign({}, base);

obj.fn1();
obj.fn1.fn2();
obj.fn2();
obj.fn1.fn2.fn1.fn1();

babel.js repl

我希望这就是您的库示例的工作方式。

如果Object.assign不可用,您可以使用 polyfill或常见的替代方案,如 _.assign来自 lodash。

关于javascript - 如何在不执行的情况下使函数可链接?像 `obj.fn.fn` 而不是 `obj.fn().fn()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30076224/

相关文章:

c++ - 方法链 + 继承不能很好地结合在一起?

JavaScript 链式连接函数?

javascript - 如何对 javascript 事件执行 Html.Action?

java - 将 Java 模式转换为 Javascript 模式

javascript - 如何在 Javascript 中获取数组中所有相同类型的对象?

javascript - 将 AngularJS 函数转换为服务

javascript - 表格/嵌套(?)JSON 集合,然后在服务器端访问它

javascript - Javascript 类中的方法链接

python - 我可以在方法链中使用 pd.drop 来删除特定行吗?

c# - 了解 C# 编译器如何处理链接 linq 方法