gpt4 book ai didi

javascript - 如何列出使用 Object.defineProperty 定义的属性

转载 作者:行者123 更新时间:2023-11-29 17:58:58 25 4
gpt4 key购买 nike

是否可以列出使用 Object.defineProperty 定义的所有属性?这些在遍历对象时不会显示:

for (var prop in obj) { ... }

也没有使用 Object.getOwnPropertyNames。

更新:我想只有在创建时设置了可枚举的:真标志才有可能。

最佳答案

不可枚举属性Object.getOwnPropertyNames 返回 :

var obj = {};
Object.defineProperty(obj, "foo", {value:42});
document.body.innerHTML = Object.getOwnPropertyNames(obj).join(", ");

如果您使用 Symbol 而不是字符串名称来定义它们,您将使用 Object.getOwnPropertySymbols .

如果您需要查找不可枚举的继承 属性,您必须通过Object.getPrototypeOf 循环您的原型(prototype)链。 .

这是一个查找所有字符串属性名称的示例,无论它们是否可枚举,包括继承的(请注意,我们在 Object.prototype 上看到了不可枚举;我们可以停止如果我们不想要它们,请更早):

var proto = {}
Object.defineProperty(proto, "answer", {value: 42});
var obj = Object.create(proto);
Object.defineProperty(obj, "question", {value: "Life, the Universe, and Everything"});

document.body.innerHTML = getAllPropertyNames(obj).join(", ");

function getAllPropertyNames(o) {
var names = [];
while (o) { // We'd use `o != Object.prototype` to stop earlier
names.push.apply(names, Object.getOwnPropertyNames(o));
o = Object.getPrototypeOf(o);
}
return names;
}

关于javascript - 如何列出使用 Object.defineProperty 定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com