I'm trying to iterate over all methods in a JavaScript pseudoclass and can easily tell if something is a method or not with (obj.member instanceof Function), however I'm trying to include methods that may be hidden from a for...in loop via defineProperty with an enumerable flag set to false - how do I iterate all members of a pseudoclass, regardless of the enumerable value?
Asked
Active
Viewed 3,591 times
1 Answers
13
You can always use Object.getOwnPropertyNames
, which will include non-enumerable properties as well. However, this will not include properties from prototypes, so if you are asking about "pseudoclass instances" you might need to loop the prototype chain with Object.getPrototypeOf
.
-
1Correction, in 8 minutes you can have some karma - damned site think's I'm a bot or something. – CoryG Feb 26 '13 at 16:29
-
what if, in inspection, I can see a property but it doesn't apear under `getOwnPropertyNames` nor `keys`? Example: `typeof obj['stuff'] == 'function'; Object.getOwnPropertyNames(this).indexOf('stuff') == -1`. This happened on an ES6 class, babelified. – igorsantos07 Aug 24 '16 at 04:34
-
@igorsantos07: as the answer says, it's likely an inherited property. Try `Object.getOwnPropertyNames(Object.getPrototypeOf(this))`, or use a complete loop. – Bergi Aug 24 '16 at 04:42
-
whoa. that's confusing. it seems from the object instance I need to use getPrototypeOf to get to the actual defined class. might be some sort of effect from using Babel to transpile code :| – igorsantos07 Aug 24 '16 at 04:56
-
@igorsantos07: No, that's how prototypes worked since the beginning, even without ES6 or Babel. – Bergi Aug 24 '16 at 04:58
-
so getOwnPropertyNames won't include properties from prototypes nor properties defined by its own class, right? – igorsantos07 Aug 24 '16 at 04:59
-
@igorsantos07 I'm not sure what you mean by "its own class". Every instance inherits the shared class methods from the prototype object. Only instance-specific data is stored in own properties. – Bergi Aug 24 '16 at 05:01
-
Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/121685/discussion-between-igorsantos07-and-bergi). – igorsantos07 Aug 24 '16 at 05:02
-
1The [following link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) might be relevant here. – x-yuri Aug 19 '21 at 19:45