使用"方法的方法是否可以是静态的"警告在JavaScript / TypeScript中被认为是错误的形式?

时间:2017-02-26 20:15:25

标签: javascript typescript

我注意到如果我编写的方法只对调用方法的局部变量起作用(不直接与类变量交互),那么我会得到一个警告,该方法可以是静态的。

有时将大量代码抽象为单独的方法很有用。这在某种程度上是考虑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;
}

这个函数的要点是对实例进行克隆,以便不修改实例本身,并创建一个不同的对象,主要是一个只有数组的值,它将用于模板中的数据绑定。我做了这个,所以我的表格模板可以重复使用,因为列数不同。

1 个答案:

答案 0 :(得分:2)

当你认为它与类API紧密耦合时,不与实例交互的代码应该是一个自由函数或者至少是类的静态方法。

必须支持您添加到API的每个其他方法。因此,较大的类需要比较小的类更多的支持。在某些语言中,如Java,您不能拥有自由函数,因此您必须将函数附加到某个类,但TypeScript和JS更灵活,因此不需要污染类API。

你可以从性能优化的角度考虑它。

当JS评估类方法时,它会在对象实例中查找它,而不是在对象原型中查找它,而不是在父级原型中等。每次查找都会占用cpu时间,所以当你考虑性能时,自由函数是你的选择。