Since class’s members are non-enumerable by default (which is a good choice) we
cannot use for .. in to iterate over all members of an instance, the same
problem could exists in a plain object when we use Object.defineProperty API.
In real world there are some scenarios where we need to iterate over members, A
common example is we need to find all set{SomeThing} methods so we can do an
auto dependency injection.
Certainly we can write a 3rd-party function to find all members through
prototype chain:
function getAllMembersKeys(obj) {
let keys = [];
while (obj) {
keys.push(...Object.getOwnPropertyNames(obj));
obj = Object.getPrototypeOf(obj);
}
return keys;
}
But it doesn’t look nice and lacks considerations of many things such as
Symbol’d keys.
Look around other languages with reflection API, most of them would provide a
method to iterate over all members / properties / methods of an instance, so
why not we provide a set of utility API:
Reflect.getAllMembersNames
Reflect.getAllMemberDescriptors
Reflect.getAllMethodNames
Reflect.getAllMethodDescriptors
Reflect.getAllPropertyNames
Reflect.getAllPropertyDescriptors
Best regards
Gray Zhang
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss