I'm trying to get getter
functions in javascript instance.
Ideal(pseudo):
class T {
internal values = a, b
getters = c, d
}
const getters = []
for (key in test) {
if (test[key] is getter)
getters.push(test[key])
}
getters.forEach(getter => (getter.bind(test))()) // calls c() and d()
I thought Object.getOwnPropertyDescriptors
can give me a getter
s, but it didn't work.
I saw the prototype(if I make instance via class
) has getter
s, but I cannot access these values.
My code:
class Test {
constructor() {
this.a = 1;
this.b = 2;
}
get c() { return this.a; }
get d() { this.a + this.b; }
}
const test = new Test();
Object.getOwnPropertyDescriptors(test.__proto__);
/*
Object { constructor: {…}, c: {…}, d: {…} }
c: Object { get: c(), enumerable: false, configurable: true, … }
constructor: Object { writable: true, enumerable: false, configurable: true, … }
d: Object { get: d(), enumerable: false, configurable: true, … }
*/
test.__proto__.c; // undefined
test.__proto__.c(); // Uncaught TypeError: test.__proto__.c is not a function
There is c
in prototype, but I can't access these values.
Is there any way to get these getter
s?
If link that I have to read exists, please notice me. Thank you.
You need to extract the get
property from the descriptor and then use that - if you try to access the .c
property directly, you'll be invoking the getter (or setter).
class Test {
constructor() {
this.a = 1;
this.b = 2;
}
get c() { return this.a; }
get d() { this.a + this.b; }
}
const test = new Test();
const testGetters = Object.values(Object.getOwnPropertyDescriptors(Object.getPrototypeOf(test)))
.filter(descriptor => descriptor.get)
.map(descriptor => descriptor.get);
console.log(testGetters);
console.log('Invoking getter manually:', testGetters[0].call(test));