【发布时间】:2015-01-07 22:09:44
【问题描述】:
我有一个包含 getter 的对象。
myObject {
id: "MyId",
get title () { return myRepository.title; }
}
myRepository.title = "MyTitle";
我想获得这样的对象:
myResult = {
id: "MyId",
title: "MyTitle"
}
我不想复制getter,所以:
myResult.title; // Returns "MyTitle"
myRepository.title = "Another title";
myResult.title; // Should still return "MyTitle"
我试过了:
- $.extend():但它不会迭代 getter。 http://bugs.jquery.com/ticket/6145
- 按照 here 的建议迭代属性,但不会迭代 getter。
- 正如我所建议的here 所建议的那样,我正在使用 Angular,使用 Angular.forEach。但我只得到属性而不是吸气剂。
有什么想法吗?谢谢!
更新 我使用 Object.defineProperty 将 getter 设置为:
"title": { get: function () { return myRepository.title; }},
可以在文档中阅读:
enumerable 当且仅当此属性在 枚举对应对象的属性。默认为 假的。
设置 enumerable: true 解决问题。
"title": { get: function () { return myRepository.title; }, enumerable: true },
【问题讨论】:
-
抱歉,您的对象存在语法错误。您需要在
get关键字之后删除:function;并且您不能拥有普通的title属性和具有相同名称的 getter。 -
$.extend确实工作得很好。错误描述说“jQuery.extend 复制属性 getter 返回值,而不是它们的代码。” - 但是,这正是您想要的。使用for in手动执行此操作也可以。 -
对不起@Bergi,对象sintax 只是对象的console.log 的副本。我要更新问题。