Ecmascript 6 ES6:在分解结构时更改值

Ecmascript 6 ES6:在分解结构时更改值,ecmascript-6,destructuring,Ecmascript 6,Destructuring,假设我有一个对象 const obj = { width: 100, height: 200 } 我希望将该对象传递给一个方法 myFunc( obj ); 在该方法中,我希望拉出高度,但同时减去一个值。我只希望这样做一次,之后它将永远不会改变 执行以下操作将获得我想要的正确高度,例如150 let {height: localHeight} = obj; localHeight = localHeight - 50; 如何在一行中完成上述操作? 像这样的东西-但我知道这不起作用 cons

假设我有一个对象

const obj = { width: 100, height: 200 }
我希望将该对象传递给一个方法

myFunc( obj );
在该方法中,我希望拉出高度,但同时减去一个值。我只希望这样做一次,之后它将永远不会改变

执行以下操作将获得我想要的正确高度,例如150

let {height: localHeight} = obj;
localHeight = localHeight - 50;
如何在一行中完成上述操作? 像这样的东西-但我知道这不起作用

const { height: (localHeight = localHeight - 50) } = obj

这是有可能的,尽管这是一种会损害可读性的黑客行为,但可能会产生错误(如果对象将来会包含假属性),并且不应在真实产品中使用。

可以对不存在的属性进行分解,并使用默认值进行减法

const obj={宽度:100,高度:200}
const{height,localHeight=height-50}=obj

console.log(localHeight)
否,这是不可能的。解构就是这样做的,它将属性分配给目标表达式。赋值语法没有用于更改赋值的任何修饰符(默认初始值设定项已经是一个延伸)

只要不使用解构,就可以在一条语句中完成:

const localHeight = obj.height - 50;

比使用解构所能实现的任何功能都要短得多,也不那么复杂。

我认为此链接可能会给您一些相关帮助:只是不要进行解构,而是编写一行代码
const{height}=obj,localHeight=height-50。相同的数字或字符,但按预期工作。谢谢,我从上面了解到这是一个黑客攻击,我的用例并不像问题那么简单-但答案很好,并且清楚地警告我不要使用它:)