Maybe we need a reflect API to iterate over instance members
Jordan Harband
ljharb at gmail.com
Sun May 31 16:44:03 UTC 2015
Would `Reflect.ownKeys` or `Reflect.enumerate` help you here?
On Sun, May 31, 2015 at 4:42 AM, Gray Zhang <otakustay at icloud.com> wrote:
> 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
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150531/e0f486cb/attachment.html>
More information about the es-discuss
mailing list