有没有办法让 lodash 复制属性 getter 和 setter?

Lea*_*yes 4 javascript node.js lodash

在以下情况下,我发现 lodash 似乎没有复制源对象的 getter:

const _ = require("lodash");

let sourceObject = { };
Object.defineProperty(sourceObject, "abc", {
    get: () => 123
});

let cloneObject = _.cloneDeep(sourceObject);

console.log(sourceObject.abc); // 123
console.log(cloneObject.abc);  // undefined
Run Code Online (Sandbox Code Playgroud)

有没有办法用lodash模块实现上述目的?

Pet*_*ons 5

仅当定义的属性为enumerable. 这将导致它被检测到,Object.keys()这最终是 lodash 获取属性名称列表的方式。当您使用选项定义属性时,这是可配置的{enumerable: true},但它默认为false,这就是为什么_.cloneDeep不选择您的属性。

有关更多详细信息,请参阅Object.defineProperty 的 MDN 文档。

  • 是的,获取值很简单。为某些定义创建“真正的克隆”[温和地说很复杂](http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object) (3认同)
  • 看来 lodash deepClone 确实会找到 getter(如果它是可枚举的),但不会在新对象中复制 getter。相反,它将使用 getter 访问该值并克隆该原始值。生成的对象克隆似乎缺少 getter 定义??? (2认同)
  • 因此,阅读这个问题,看起来它是关于制作 getter 本身的副本,而 cloneDeep 无法做到这一点。然而,即使解决方案没有克隆吸气剂,你的答案也被认为工作完美。所以去想想…:)我正在努力寻找一种方法来深度克隆一个在其结构中可能包含基本吸气剂的对象。 (2认同)