Given this class; how would i iterate over the methods that it includes?
class Animal { constructor(type){ this.animalType = type; } getAnimalType(){ console.log('this.animalType: ', this.animalType ); } } let cat = window.cat = new Animal('cat')
What I have tried is the following with no success:
for (var each in Object.getPrototypeOf(cat) ){ console.log(each); }
You can use Object.getOwnPropertyNames on the prototype:
Object.getOwnPropertyNames( Animal.prototype ) // [ 'constructor', 'getAnimalType' ]
i know, i know, but hey...
const isGetter = ( x, name ) => ( Object.getOwnPropertyDescriptor( x, name ) || {} ).get const isFunction = ( x, name ) => typeof x[ name ] === "function"; const deepFunctions = x => x && x !== Object.prototype && Object.getOwnPropertyNames( x ) .filter( name => isGetter( x, name ) || isFunction( x, name ) ) .concat( deepFunctions( Object.getPrototypeOf( x ) ) || [] ); const distinctDeepFunctions = x => Array.from( new Set( deepFunctions( x ) ) ); const userFunctions = x => distinctDeepFunctions( x ).filter( name => name !== "constructor" && !~name.indexOf( "__" ) ); // example usage class YourObject { hello() { return "uk"; } goodbye() { return "eu"; } } class MyObject extends YourObject { hello() { return "ie"; } get when() { return "soon"; } } const obj = new MyObject(); console.log( userFunctions( obj ) ); // [ "hello", "when", "goodbye" ]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With