我在对象中有两个函数
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
可能是函数或属性访问器,只要他们做东西我就不在乎。
我在很多图书馆看到过,例如chalk color.red.bold('string')
。
答案 0 :(得分:1)
如果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或来自lodash的_.assign
等常用替代方案。
答案 1 :(得分:0)
我认为它只是一些嵌套对象。看看这段代码:
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'));
&#13;