首页 > 解决方案 > 覆盖对象解构的默认行为的 JavaScript 方法

问题描述

JS 中有没有办法在对象被解构时覆盖对象的默认行为?

// Normally destructing lifts properties from an object
const foo = {
  a: 1,
  b: 2,
};

const { a, b } = foo; // a = 1, b = 2

// I would like to have a method return the properties to be
// destructured
const bar = {
  toObject: () => {
    return { a, b };
  },
};

const { a, b } = bar; // a = undefiner, b = undefined

我知道我可以简单地使用const { a, b } = bar.toObject();,但这需要对象的消费者知道它的内部是如何工作的,并且违反了最小惊讶原则。

我能想到的最接近我想要的是toJSON魔术方法。

标签: javascriptdestructuring

解决方案


没有。规范要求右侧解析为可以通过 转换为对象的值,ToObject如果传递了一个对象,则仅返回对象本身(即不调用对象上的特殊方法将其转换为其他对象)。

在此处输入图像描述


推荐阅读