【发布时间】:2019-10-27 11:47:14
【问题描述】:
很多人在使用destructor时遇到stubing functions with sinon.js的问题,Sinon stub function used with destructuring有一个很好的解释。
正如答案中提到的,在使用析构函数时,我们总是调用原始函数:
const stub = (o, method) => (o[method] = () => "I am a stub");
const obj = {
methodFoo() {
return "I am foo";
}
};
// same as doing `const methodFoo = obj.methodFoo;`
const { methodFoo } = obj; // "import" using destructuring
console.log("obj.methodFoo(): ", obj.methodFoo());
console.log("methodFoo()", methodFoo());
console.log("Stubbing out method!");
stub(obj, "methodFoo");
console.log("obj.methodFoo: ", obj.methodFoo());
console.log("methodFoo()", methodFoo());
我搜索了一个答案,为什么 destructor 会覆盖 stub 或者它如何在后台工作以了解如何操作数据,但我没有得到任何解决方案。有没有关于这个问题的详细信息?
【问题讨论】:
-
JavaScript 使用 by value 分配/复制。
const { methodFoo } = obj;将obj.methodFoo具有的值的副本分配给methodFoo,这是对函数的引用。之后,对obj.methodFoo的任何更改都不会影响变量methodFoo。不过,这并不是特定于解构的。这就是 JS 中赋值、变量和值的工作方式。这是一个简单得多的例子:var obj = {foo() { console.log('foo'); }; var method = obj.foo; obj.foo = () => console.log('bar'); method(); -
@FelixKling 非常感谢。
标签: javascript node.js ecmascript-6 destructuring