在一个 class 中同时使用静态和非静态方法是否被认为是不好的做法?
Is having both static and non-static methods in one class considered bad practise?
我的意思是:
在一个 javascript class 中,我有一些不使用 >this< 的方法,它们仅由实例 "public" 方法调用。
这是否意味着我需要将这些方法放入不同的 class?
示例:
function TemplateRenderer(vars) {
var a = this.transform_vars(vars); // doesn't use any instance vars
this.b = this.even_further_transform(a);
}
TemplateRenderer.prorotype.render(tpl) {uses this.b}
问题是 - 我应该将 trnasform_vars 放在 class 之外吗?
should I place transform_vars
outside the class?
没有。 transform_vars
似乎与您的 TemplateRenderer
class 关系密切。所以除非你发现自己需要在其他地方转换 vars(这样一个额外的实用对象是合理的),你应该把它放在你的 class 结构中。
they are only called by instance "public" methods
您仍然可以使这些方法对您的 class 私有,即将所有内容放在 IEFE 中。你可能不想暴露它们。
methods that don't use this
是静态的,是的。虽然将它们放在 class 中的确切位置并不重要,但 javascript 中的标准做法是将它们放在构造函数对象上。这样,无需构造任何实例即可调用它们(如果放置在 .prototype
上,则可以访问它们)。
所以你可能会
function TemplateRenderer(vars) {
var a = TemplateRenderer.transform_vars(vars);
…
}
TemplateRenderer.transform_vars = function(vars) {
… // doesn't use any instance vars
};
我的意思是: 在一个 javascript class 中,我有一些不使用 >this< 的方法,它们仅由实例 "public" 方法调用。 这是否意味着我需要将这些方法放入不同的 class?
示例:
function TemplateRenderer(vars) {
var a = this.transform_vars(vars); // doesn't use any instance vars
this.b = this.even_further_transform(a);
}
TemplateRenderer.prorotype.render(tpl) {uses this.b}
问题是 - 我应该将 trnasform_vars 放在 class 之外吗?
should I place
transform_vars
outside the class?
没有。 transform_vars
似乎与您的 TemplateRenderer
class 关系密切。所以除非你发现自己需要在其他地方转换 vars(这样一个额外的实用对象是合理的),你应该把它放在你的 class 结构中。
they are only called by instance "public" methods
您仍然可以使这些方法对您的 class 私有,即将所有内容放在 IEFE 中。你可能不想暴露它们。
methods that don't use
this
是静态的,是的。虽然将它们放在 class 中的确切位置并不重要,但 javascript 中的标准做法是将它们放在构造函数对象上。这样,无需构造任何实例即可调用它们(如果放置在 .prototype
上,则可以访问它们)。
所以你可能会
function TemplateRenderer(vars) {
var a = TemplateRenderer.transform_vars(vars);
…
}
TemplateRenderer.transform_vars = function(vars) {
… // doesn't use any instance vars
};