2017-02-26 4 views
1

私は、メソッドを呼び出すローカル変数(クラス変数と直接対話しない)にしか作用しないメソッドを記述すると、メソッドが静的である可能性があるという警告が表示されることに気付きました。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; 
} 

この機能の点は、インスタンス自体を変更しないように、インスタンスのクローンを取り、別のオブジェクトを作成、にデータバインドするために使用される主な値だけ配列しますテンプレート。私はこれをして、列の数が変わるので、私の表テンプレートを再利用できるようにしました。

+0

音が聞こえません角度関連の文字はTypeScriptのみです。 –

+0

ありがとう!タイトル、コンテンツ、タグを更新しました –

+0

あなたはどこでその警告を受け取りますか?コンパイラ自体はそれを生成しません。IDEでしょうか?また、コードを表示することができれば便利です。 –

答えて

1

インスタンスとやりとりしないコードは、クラスAPIと緊密に結合していると思われる場合は、フリー関数または少なくともクラスの静的メソッドである必要があります。

APIに追加するすべての追加メソッドをサポートする必要があります。したがって、より大きいクラスは、より小さいクラスより多くのサポートを必要とします。 Javaのようにいくつかの言語では自由な関数を使うことができないので、あるクラスに関数を付ける必要がありますが、TypeScriptとJSは柔軟性があり、クラスAPIを汚染する必要はありません。

パフォーマンスの最適化の観点から考えてください。

JSはクラスメソッドを評価するとき、オブジェクトプロトタイプよりもオブジェクトプロトタイプではなく、親プロトタイプなどで参照します。すべてのルックアップはCPU時間を消費します。したがって、パフォーマンスについて考えると自由関数が選択です。

+0

面白いことに、上の私の例では、this.checkBoxはインスタンス変数であり、メソッドへのインクルードは、IDEが警告を生成しないようにしています。その1つの割り当てをコメントアウトすると、警告が表示されます。その課題はあなたが言及した問題を防ぐのですか? –

+0

@ChrisSharp正確に!ところで、後で追加しましたか?どうにかして私はあなたの質問を最初に読んだときにこの変数を逃しました。 –

+0

警告を表示しないで追加しておく必要があります。この割り当てはどのようにパフォーマンスを向上させますか?私はまだ混乱している。それがうまくいくならば、いつもそれをインスタンスにバインドするのはなぜですか? –

関連する問題