gpt4 book ai didi

javascript - ES6 中允许类生成函数吗?

转载 作者:行者123 更新时间:2023-11-28 18:14:52 24 4
gpt4 key购买 nike

我需要通过一些参数创建类。我想用一个函数来做到这一点。我使用 node.js v7.0 进行了尝试,它看起来运行良好,但我想知道 es6 规范是否允许它。

例如:

const MyClassGenerator = (something) => {
return class GeneratedClass {
get type() {
return something;
}
}
}

class MyInheritedClass extends MyClassGenerator('foo') {
...
}

new MyInheritedClass().type // => 'foo'

最佳答案

是的,class 语法可以在任何范围内用于声明和表达式 - 它不需要是(模块)顶级。

返回类的函数是非常可能的,并且正如您所经历的那样,它确实按预期工作。然而,这通常是一个糟糕的 ida:

  • 生成的类通常彼此非常相似,但它们缺乏共同的父类(super class)
  • 如果在 extends 子句中使用,它通常会引入不必要的继承级别。

与第 1 点相反,您可以让所有生成的类扩展共享的类:

class Base {
get type() {
return this.constructor.type;
}
}
const MyClassGenerator = (something) => {
class GeneratedClass extends Base {}
GeneratedClass.type = something;
return GeneratedClass
}

(在这种情况下不太有用,但通常是一个好方法)

与第 2 点相反,您通常不想使用 extends 将生成的内容混合到您的类中。而是使用装饰器!

function myClassDecorator = (something, constructor) => {
Object.defineProperty(constructor.prototype, "type", {
get() {
return something;
},
configurable: true
});
return constructor;
}

let MyInheritedClass = myClassDecorator('foo', class {
...
});

关于javascript - ES6 中允许类生成函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40912345/

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