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
,你也不能神奇地将一个对象变为一个函数。但函数就是一个对象。我希望有一种方法将我的对象定义为一个函数,然后再改变它的主体。。。