在es6中这个想法或类似的想法是否可行?
function() {
class A {}
}
答案 0 :(得分:2)
是的,因为一个类只是一个无法调用的函数的语法糖。相反,它必须使用new
进行实例化。您可以使用https://babeljs.io/repl/来查看课程的实际效果。
示例
/* ES6 code */
class Car {
constructor() {
this.wheels = 4;
}
}
/* generated ES5 code */
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Car = function Car() {
_classCallCheck(this, Car);
this.wheels = 4;
};
答案 1 :(得分:1)
是的,这确实与您编写的一样(没有丢失的函数名称)。
但是,我会反对它。在多次调用的函数中动态创建类会破坏共享方法(等)的目的,因为每次调用都会创建一个新的原型。当您实际上只需要在该功能中创建自定义实例时,请不要这样做。
如果您使用的是ES6模块,只需将类声明放在函数之外,但不要导出它。如果您不使用模块,只需将类和函数包装在IIFE中。
上述规则的一个例外是,您确实需要动态创建少数类。因为它们看起来非常相似,但它们可能是某些共同祖先的子类。
class Common {
…
}
function makeSubclass(…) {
return class Sub extends Common {
…
};
}
const Sub1 = makeSubclass(…);
const Sub2 = makeSubclass(…);