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



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

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可以是函数或属性访问器,只要他们做事,我不在乎。

我在许多图书馆都看到过它,比如粉笔color.red.bold('string').

如果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();

巴别塔.js雷普尔

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

如果 Object.assign 不可用,您可以使用 polyfill 或常见的替代方法,例如 lodash 中的_.assign

我认为这只是一些嵌套对象。看看这段代码:

function Color(c) { this.color = c; }
Color.prototype.bold = function(text) { return '<strong style="color: ' + this.color + '">' + text + '</strong>'; }
var colors = {
red: new Color('red'),
blue: new Color('blue')
}
document.write(
colors.red.bold('text'));
document.write(
colors.blue.bold('text'));

最新更新