gpt4 book ai didi

javascript - 根据另一个类的属性创建一个带有 getter 的类

转载 作者:行者123 更新时间:2023-12-04 07:40:02 25 4
gpt4 key购买 nike

假设我有一个具有一百个属性的 A 类:

class A {
FOO = "foo";
BAR = "bar";
// (...) 98 more properties
}
在 typescript 中,如何为类 A 的每个属性动态定义一个具有一个 getter 的类 B?
相应的静态定义类 B 将如下所示:
class B {
get FOO() {
someFunction('FOO');
}

get BAR() {
someFunction('BAR');
}

// (...) 98 more getters
}
这些类之间的关系如下:
  • B 中的 getter 名称等于 A 中的属性名称
  • B 中 getter 的主体正是函数 someFunction 的调用带有一个参数,它是一个带有 getter 名称的字符串
  • 最佳答案

    一种选择是动态定义 getter:

    class A {
    FOO = "foo";
    BAR = "bar";
    // (...) 98 more properties
    }

    function someFunction(p) {
    console.log('someFunction', p)
    }

    class B {
    constructor(a) {
    for (let p of Object.getOwnPropertyNames(a))
    Object.defineProperty(this, p, {
    get: () => someFunction(p)
    })
    }
    }

    b = new B(new A)
    b.FOO
    b.BAR

    我猜你需要通过 asomeFunc同样,否则它如何知道从哪个对象中选择属性?
    另一种是使用 Proxy :

    class A {
    FOO = "foo";
    BAR = "bar";
    // (...) 98 more properties
    }

    function someFunction(p) {
    console.log('someFunction', p)
    }

    class B {
    constructor() {
    return new Proxy({}, {
    get(target, p) {
    return p in target ? Reflect.get(target, p) : someFunction(p)
    }
    })
    }
    }

    b = new B()
    b.FOO
    b.BAR

    在后一种情况下,B 和 A 实际上是独立的,因此 B 只是一个“空心”对象,它将所有内容重定向到 someFunc .

    关于javascript - 根据另一个类的属性创建一个带有 getter 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67531969/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com