在python单词中有dir()函数
返回该对象的有效属性列表
用JS的话说,我发现:
Object.getOwnPropertyNames
Object.keys
但他们没有显示所有属性:
> Object.getOwnPropertyNames([])
[ 'length' ]
如何获取所有属性和方法的列表
concat, entries, every, find....
例如用于Array()?
答案 0 :(得分:1)
您可以将Object.getOwnPropertyNames
与Object.getPrototypeOf
一起使用,以遍历原型链并收集每个对象的所有属性。
var result = []
var obj = []
do {
result.push(...Object.getOwnPropertyNames(obj))
} while ((obj = Object.getPrototypeOf(obj)))
document.querySelector("pre").textContent = result.join("\n")
<pre></pre>
它处理所有属性,无论它们是否被继承或可枚举。但是,这不包括Symbol
属性。要包含这些内容,您可以使用Object.getOwnPropertySymbols
。
var result = []
var obj = []
do {
result.push(...Object.getOwnPropertyNames(obj), ...Object.getOwnPropertySymbols(obj))
} while ((obj = Object.getPrototypeOf(obj)))
答案 1 :(得分:1)
Object.getOwnPropertyNames(Array.prototype)
尝试以您发布的方式获取值的原因不起作用,原因是您要求Array
对象的单个实例的属性名称。出于多种原因,每个实例仅具有与该实例唯一的属性值。由于在Array.prototype
中找到的值对于特定实例并不是唯一的 - 这是有意义的,并非所有数组都将共享length
的相同值 - 它们将被共享/继承用于所有实例Array
。
答案 2 :(得分:0)
您可以使用Object.getOwnPropertyNames
Object.getOwnPropertyNames()
方法返回直接在给定对象上找到的所有属性(可枚举或不可枚举)的数组。
console.log(Object.getOwnPropertyNames(Array.prototype));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 3 :(得分:0)
此方法将允许您从对象的特定实例中提取所有键和功能(忽略不需要的):
const ROOT_PROTOTYPE = Object.getPrototypeOf({});
function getAllKeys(object) {
// do not add the keys of the root prototype object
if (object === ROOT_PROTOTYPE) {
return [];
}
const names = Object.getOwnPropertyNames(object);
// remove the default constructor for each prototype
if (names[0] === 'constructor') {
names.shift();
}
// iterate through all the prototypes of this object, until it gets to the root object.
return names.concat(getAllKeys(Object.getPrototypeOf(object)));
}