4

Javascript プログラマーが、コード全体で文字列を繰り返すのではなく、列挙型のようなオブジェクトを使用して定数値を表すことに価値を見出さない理由を理解しようとしています。例えば:

foo.addEventListener("someEvent", function(event) { .... });

foo.addEventListener(events.someEvent, function(event) { .... });

JSLintのようなツールは、無効な値を渡したときにうまくいく可能性が高いため、私には 2 番目の方が優れているように思えます (それが の宣言を確認できる場合events)。

私が聞いている文字列を支持する議論は、基本的に「これは JavaScript プログラマーが行う方法です」という行に沿っています。これは、私がこれまでに取り組んだ他のほとんどすべての言語のベストプラクティスに直面しているように見えるため、私をいらいらさせます。の。

だから私が理解するのを手伝ってください:これは私のCの習慣を​​JS開発者に押しつけようとしているケースですか?私のやり方を変えることを学ぶ必要がありますか?

4

4 に答える 4

3

私は個人的には知りませんが、問題は、多くの JS コーダーが連想配列を (乱用) 使用して列挙型のような効果を与えることができることに気付いていないことだと思います。

var events = {
    someEvent : "someEvent",
    someOtherEvent : "someOtherEvent"
}

foo(events.someEvent);

このようにすることは間違いなく良い習慣であり、多くのコーディングの問題を回避できます。

于 2012-08-31T09:32:15.750 に答える
1

JavaScriptでは、プロパティのルックアップは潜在的にコストがかかる可能性があります(スコープトラバーサルと長いプロトタイプチェーン)。

そして、静的アナライザー(JSLintを含む)が実際にオブジェクトのコンテンツを取得するのを見たことがありません。

個人的に私はあなたの方法が好きですが、それはトレードオフになります。

于 2012-08-31T09:32:48.613 に答える
1

誰があなたに言ったのかはわかりませんが、私は個人的に Web 開発に焦点を当てたクラスを受講したことがあり、文字列を何度も何度も入力するのではなく、変数を定数としてグローバル スコープに配置することを推奨しています。頭痛の種が少なくなり、より組織化され、場合によってはスケーラビリティにも役立ちます.

ただし、可能であればグローバル変数を避けることが一般的に理想的です (これは、おそらくご存知のように、すべてのコーディング言語で見られます)。理想的には、グローバルにしてローカルに保つ必要がない場合は、そうする必要があります。変数を渡したり、変更されない定数を何度も使用したりしている場合は、それを変数に入れることもできます。

結論: やり方を変える必要はありません。実際、多くの JS 開発者がこれらの優れたプラクティスを採用していない理由は、javascript の柔軟性が高いためです。多くの JS 開発者が Java や C を最初の言語として学習した場合、これらの良い習慣も身に付くはずです。

于 2012-08-31T09:49:14.607 に答える
0

eventsグローバル/クルーザースコープに変数を追加する必要があるためです。

ただし、javascriptでは、変数を常にローカルスコープに保持する必要があります。これは、はるかに高速だからです。

于 2012-08-31T09:33:36.977 に答える