作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在一个对象中有两个函数
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()
如何做到这一点?
编辑:fn1
和 fn2
可以是函数或属性访问器,我不在乎,只要它们做事即可。 p>
我在很多图书馆都见过它,比如 chalk color.red.bold('字符串')
。
最佳答案
如果 fn1
、fn2
和 obj
都引用了这两个函数,您就可以这样做。 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();
我希望这就是您的库示例的工作方式。
如果Object.assign不可用,您可以使用 polyfill或常见的替代方案,如 _.assign
来自 lodash。
关于javascript - 如何在不执行的情况下使函数可链接?像 `obj.fn.fn` 而不是 `obj.fn().fn()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30076224/
我是一名优秀的程序员,十分优秀!