等效于JavaScript中函数的Object.assign()

时间:2017-03-02 18:19:48

标签: javascript

Object.assign的一个常见用例是修改(或展平替换)对象的属性而不更改对象的引用,因此具有该引用的其他内容也会更新。

有没有办法用函数的内容做到这一点?

所以,例如:

const a = () => console.log('a');
const b = a;
doSomethingMagicalHere(b, () => console.log('b'));
b(); // prints 'b'
a(); // prints 'b'

2 个答案:

答案 0 :(得分:0)

  

有没有办法修改/替换函数的内容?

不,那是完全不可能的。函数的行为(即调用它的行为)在Javascript中是不可变的。

当然,如果你事先知道你想要改变函数的行为,你可以使函数成为一个闭包,依赖于一些外部的可交换状态来确定它应该做什么:

const a = function f(...args) { return f.contents.call(this, ...args); }
a.contents = () => console.log('a');
a(); // prints 'a'
Object.assign(a, {contents(){ console.log('b') }});
a(); // prints 'b'

答案 1 :(得分:-1)

首先,在您的示例中有一件我不理解的事情,即使用 const 。如果在第3行重新分配 b ,为什么要使用 const b

无论如何,在Javascript中,大多数变量都使用引用。因此,例如,在以下代码中, const a 被定义为函数,变量b 是对 a 的引用,因此在为 b 分配新功能时,您实际上也分配了 a

bin

我希望我没有错过你的观点。

编辑#1

我不是将函数 a 声明为将在之后重新分配的const,而是将该函数存储在静态对象中。然后,对象引用/指针本身是一个常量,但其内容及其属性不被视为不可移动的。 (https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75#.whv1jizih

package.json