>我在一个对象中有两个函数
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
可以是函数或属性访问器,只要他们做事,我不在乎。
我在许多图书馆都看到过它,比如粉笔color.red.bold('string')
.
如果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();
巴别塔.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'));