如何在 javascript 中获取 getter 函数?
How can I get getter functions in javascript?
我正在尝试在 javascript 实例中获取 getter
函数。
理想(伪):
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()
我以为Object.getOwnPropertyDescriptors
可以给我一个getter
,但是没用。
我看到原型(如果我通过 class
创建实例)有 getter
,但我无法访问这些值。
我的代码:
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
原型中有c
,但我无法访问这些值。
有什么方法可以得到这些 getter
吗?
如果我要看的link存在,请通知我。
谢谢。
您需要从描述符中提取 get
属性 然后使用它 - 如果您尝试直接访问 .c
属性,您将调用 getter(或 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));
我正在尝试在 javascript 实例中获取 getter
函数。
理想(伪):
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()
我以为Object.getOwnPropertyDescriptors
可以给我一个getter
,但是没用。
我看到原型(如果我通过 class
创建实例)有 getter
,但我无法访问这些值。
我的代码:
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
原型中有c
,但我无法访问这些值。
有什么方法可以得到这些 getter
吗?
如果我要看的link存在,请通知我。 谢谢。
您需要从描述符中提取 get
属性 然后使用它 - 如果您尝试直接访问 .c
属性,您将调用 getter(或 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));