在函数之前定义函数属性

时间:2018-06-04 14:58:39

标签: javascript

我有一个对象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

2 个答案:

答案 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