我有一个对象foo
,我想将其称为函数foo(...)
。我可以这样做:
foo = n => n * foo.factor;
foo.factor = 2;
foo(2) // returns 4
但为了实现这一点,我需要在其他属性之前编写函数(n => n * foo.factor
)。我怎么能写完之后?我想做这样的事情:
foo = { factor: 2 }
// write function
foo(2) // returns 4
答案 0 :(得分:1)
也许使用一个小实用程序:
const functionize = (obj, fn) => Object.assign(fn, obj);
所以可以这样做:
let foo = { factor: 2 };
foo = functionize(foo, n => n * foo.factor);
foo(2);
或者您只是使用常规功能:
foo.factor = 2;
function foo(n) { return foo.factor * n; }
我希望有一种方法可以将我的对象定义为一个函数,然后再更改它的正文......
const foo = (...args) => (foo.body || () => null)(...args);
foo.factor = 2;
foo.body = n => foo.factor * n;
foo(2);
答案 1 :(得分:0)
你可以使用一个简单的帮助器来完成它:
const annotate = (f, annotations) => {
Object.assign(f, annotations);
return f;
};
......你可以这样使用:
foo = annotate(n => n * foo.factor, {factor: 2});
foo(2); // returns 4
但我不会。相反,我创建了一个功能构建器:
const makeFoo = factor => n => n * factor;
然后:
const foo = makeFoo(2);
foo(2); // returns 4
实例:
const makeFoo = factor => n => n * factor;
const foo2 = makeFoo(2);
console.log(foo2(2)); // returns 4
const foo4 = makeFoo(4);
console.log(foo4(2)); // returns 8