Javascript 在函数之前定义函数属性

Javascript 在函数之前定义函数属性,javascript,Javascript,我有一个对象foo,我想作为函数foo(…)调用它。我可以这样做: foo = n => n * foo.factor; foo.factor = 2; foo(2) // returns 4 foo = { factor: 2 } // write function foo(2) // returns 4 foo = annotate(n => n * foo.factor, {factor: 2}); foo(2); // returns 4 但是为了让它工作,我需要在其他

我有一个对象
foo
,我想作为函数
foo(…)
调用它。我可以这样做:

foo = n => n * foo.factor;
foo.factor = 2;
foo(2) // returns 4
foo = { factor: 2 }
// write function
foo(2) // returns 4
foo = annotate(n => n * foo.factor, {factor: 2});
foo(2); // returns 4
但是为了让它工作,我需要在其他属性之前编写函数(
n=>n*foo.factor
)。我以后怎么写呢?我想这样做:

foo = n => n * foo.factor;
foo.factor = 2;
foo(2) // returns 4
foo = { factor: 2 }
// write function
foo(2) // returns 4
foo = annotate(n => n * foo.factor, {factor: 2});
foo(2); // returns 4

可能使用一个小实用程序:

 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 annotate = (f, annotations) => {
    Object.assign(f, annotations);
    return f;
};
…您可以这样使用:

foo = n => n * foo.factor;
foo.factor = 2;
foo(2) // returns 4
foo = { factor: 2 }
// write function
foo(2) // returns 4
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
实例:

constmakefoo=factor=>n=>n*factor;
const foo2=makeFoo(2);
console.log(foo2(2));//返回4
const foo4=makeFoo(4);

console.log(foo4(2));//返回8
您通常不在函数上定义属性,看起来您需要一个
instead@IrkenInvader听说过jquery吗?@JonasW。在我的完美世界中,我通常也不会使用jquery:)这是可行的。谢谢但这是唯一的办法吗?我的对象是一个
常量
,因此我不想重新分配it@diego有一千种方法。但是,它们都不是推荐的,也不是有用的。有没有办法用
const
对象来实现这一点呢?@diego不,你不能重写
const
,你也不能神奇地将一个对象变为一个函数。但函数就是一个对象。我希望有一种方法将我的对象定义为一个函数,然后再改变它的主体。。。