由于您的问题主要是风格问题(不想用一堆声明填充构造函数),因此也可以从样式上解决。
我的看法是,许多基于类的语言都将构造函数设为以类名称本身命名的函数。从风格上讲,我们可以使用它来使ES6类在风格上仍然有意义,但不会将构造函数中发生的典型操作与我们正在执行的所有属性声明进行分组。我们只使用实际的JS构造函数作为“声明区域”,然后创建一个名为function的类,否则将其视为“其他构造函数”区域,在真正的构造函数的末尾调用它。
“使用严格”;
类MyClass
{
//仅声明您的属性,然后调用this.ClassName(); 从这里
构造函数(){
this.prop1 ='blah 1';
this.prop2 ='blah 2';
this.prop3 ='blah 3';
this.MyClass();
}
//各种其他“构造函数”的东西,不再与声明混为一谈
我的课() {
doWhatever();
}
}
两者都将在构造新实例时被调用。
Sorta就像有2个构造函数,您可以在其中分离出声明和要执行的其他构造函数动作,从样式上也可以很容易地理解这是怎么回事。
我发现在处理大量声明和/或在实例化时需要执行的许多动作并希望使这两种想法彼此不同时,可以使用一种不错的样式。
注意:我非常有目的地不使用“初始化”的典型惯用想法(如an init()
或initialize()
method),因为它们经常以不同的方式使用。构造和初始化之间存在某种假定的差异。与构造函数一起工作的人们知道,它们在实例化过程中被自动调用。看到init
许多人会不假思索地假定他们需要做某种形式的方法var mc = MyClass(); mc.init();
,因为这通常是您初始化的方式。我不是要为类的用户添加初始化过程,而是要添加到类本身的构造过程中。
尽管有些人可能会花一会儿时间,但这实际上是重点:它向他们传达了意图是建设的一部分,即使这会使他们做一番重复即走。 ES6构造函数的工作原理”,然后再看一下实际的构造函数,以“哦,我知道它们在底部”,这比不传达意图(或错误传达)要好得多,人们使用它是错误的,试图从外部和垃圾中初始化它。这是我建议的模式非常有意的。
对于那些不想遵循这种模式的人,完全相反的做法也可以。在开始时将声明植入另一个函数。也许将其命名为“属性”或“ publicProperties”或其他名称。然后将其余内容放入普通的构造函数中。
“使用严格”;
类MyClass
{
properties(){
this.prop1 ='blah 1';
this.prop2 ='blah 2';
this.prop3 ='blah 3';
}
constructor(){
this.properties();
doWhatever();
}
}
请注意,第二种方法看起来更干净,但它也存在一个固有的问题,即properties
当使用该方法的一个类扩展了另一个方法时,该方法将被覆盖。您必须提供更多唯一的名称properties
来避免这种情况。我的第一种方法没有此问题,因为其虚假的构造函数的一半是在该类后唯一地命名的。
this.member = member
在构造函数中重复使用20-30个参数?