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) });