我注意到如果我编写的方法只对调用方法的局部变量起作用(不直接与类变量交互),那么我会得到一个警告,该方法可以是静态的。
有时将大量代码抽象为单独的方法很有用。这在某种程度上是考虑JavaScript / TypeScript中的不良做法吗?
由于我一直收到这些警告,我抓住了一个机会,警方会逮捕我,因为他提出了一个可以提出意见的问题。让我来反对,说我得到的警告不是意见。他们是明确的警告。这表明存在一个不是意见的答案,至少从决定制定这些警告的人的角度来看。
编辑: 我被要求在这里放置代码,以提供我为什么要这样做的有效理由。我个人认为这不会增加我提出的问题的清晰度,但这里是一个在WebStorm中产生警告的方法示例。
//Change object array in *.content objects to values array
//noinspection JSMethodCanBeStatic
transformData(visibleData) {
const ret: any = {};
ret.headings = visibleData.headings;
ret.checkbox = this.checkBox; //add if the table needs checkboxes
ret.content = [];
for (let i = 0; i < visibleData.content.length; i++) {
ret.content.push(_.values(visibleData.content[i]));
}
return ret;
}
这个函数的要点是对实例进行克隆,以便不修改实例本身,并创建一个不同的对象,主要是一个只有数组的值,它将用于模板中的数据绑定。我做了这个,所以我的表格模板可以重复使用,因为列数不同。
答案 0 :(得分:2)
当你认为它与类API紧密耦合时,不与实例交互的代码应该是一个自由函数或者至少是类的静态方法。
必须支持您添加到API的每个其他方法。因此,较大的类需要比较小的类更多的支持。在某些语言中,如Java,您不能拥有自由函数,因此您必须将函数附加到某个类,但TypeScript和JS更灵活,因此不需要污染类API。
你可以从性能优化的角度考虑它。
当JS评估类方法时,它会在对象实例中查找它,而不是在对象原型中查找它,而不是在父级原型中等。每次查找都会占用cpu时间,所以当你考虑性能时,自由函数是你的选择。