Javascript: 如何获取对象或数组的 `prototype` 或 `__proto__` 的所有属性
Javascript: How to get the all properties of `prototype` or `__proto__` of an Object or Arrays
我们知道Object.keys
会return一个Object或Array的自身属性,但是我需要Array or Object
的所有属性。如果您看到下图,[].__proto__ and {}.__proto__
的所有属性都不是 enumerable
。
获得所有 properties
包括 own
和 __proto__
的最佳方法是什么?
获得所有 properties
包括 own
和 __proto__
的最佳方法是什么?
我尝试了以下方法,不确定是否是最佳方法。
示例:
const getAllProperties = ref => {
const own_properites = Object.keys(ref)
const proto_properties = Object.keys(Object.getOwnPropertyDescriptors(ref.__proto__))
return [...own_properites, ...proto_properties]
}
const object = {
name: 'A'
};
console.log({ objectProps: getAllProperties(object) })
const array = [1,2,3];
console.log({ arrayProps: getAllProperties(array) });
您可以使用 Object.getOwnPropertyNames
而不是先通过描述符来稍微缩短它。此外,您当前的方法是获取实例的 Object.keys
,但 Object.keys
跳过不可枚举的属性:
const obj = {};
Object.defineProperty(obj, 'foo', { value: 'value' });
console.log(Object.keys(obj));
因此,对实例和原型都使用 getOwnPropertyNames
。
您也可以考虑使用 Object.getPrototypeOf
,这与已弃用的 __proto__
不同。
const getAllProperties = ref => [
...Object.getOwnPropertyNames(ref),
...Object.getOwnPropertyNames(Object.getPrototypeOf(ref)),
];
const object = {
name: 'A'
};
console.log({ objectProps: getAllProperties(object) })
const array = [1,2,3];
console.log({ arrayProps: getAllProperties(array) });
我们知道Object.keys
会return一个Object或Array的自身属性,但是我需要Array or Object
的所有属性。如果您看到下图,[].__proto__ and {}.__proto__
的所有属性都不是 enumerable
。
获得所有 properties
包括 own
和 __proto__
的最佳方法是什么?
获得所有 properties
包括 own
和 __proto__
的最佳方法是什么?
我尝试了以下方法,不确定是否是最佳方法。
示例:
const getAllProperties = ref => {
const own_properites = Object.keys(ref)
const proto_properties = Object.keys(Object.getOwnPropertyDescriptors(ref.__proto__))
return [...own_properites, ...proto_properties]
}
const object = {
name: 'A'
};
console.log({ objectProps: getAllProperties(object) })
const array = [1,2,3];
console.log({ arrayProps: getAllProperties(array) });
您可以使用 Object.getOwnPropertyNames
而不是先通过描述符来稍微缩短它。此外,您当前的方法是获取实例的 Object.keys
,但 Object.keys
跳过不可枚举的属性:
const obj = {};
Object.defineProperty(obj, 'foo', { value: 'value' });
console.log(Object.keys(obj));
因此,对实例和原型都使用 getOwnPropertyNames
。
您也可以考虑使用 Object.getPrototypeOf
,这与已弃用的 __proto__
不同。
const getAllProperties = ref => [
...Object.getOwnPropertyNames(ref),
...Object.getOwnPropertyNames(Object.getPrototypeOf(ref)),
];
const object = {
name: 'A'
};
console.log({ objectProps: getAllProperties(object) })
const array = [1,2,3];
console.log({ arrayProps: getAllProperties(array) });