首页 > 解决方案 > 如何将一个对象的 getter 绑定到另一个对象?

问题描述

假设你有let a = { b: { c: 1 } }并且const getters = { get c() { return this.b.c } }你传播gettersalike a = { ...a, ...getters }getters.c必然是错的this。您如何将方法绑定gettersa而不必bind为每个方法编写(假设getters将来会有更多的 getter 方法)。

标签: javascript

解决方案


使用扩展语法将调用getter:

const obj = {
  get prop() {
    console.log('getter invoked');
  }
};
const obj2 = { ...obj };

它实际上不会复制吸气剂,所以这不是你应该使用的。用 迭代 getter-object 的键和 getter 函数Object.getOwnPropertyDescriptors,然后使用Object.defineProperty将 getter 放在a对象上:

let a = {
  b: {
    c: 1
  }
};
const getters = {
  get c() {
    return this.b.c
  }
};

Object.entries(Object.getOwnPropertyDescriptors(getters)).forEach(([key, { get }]) => {
  Object.defineProperty(a, key, { get });
});
console.log(a.c);


推荐阅读