2011-11-15 4 views
0

domにあるかもしれない要素にプロトタイプのメソッドを適用したいとします。メソッドを適用する前の要素/イベントの正当性チェック

は、一般的に、私が行うために使用:

var foo = document.getElementById("foo"); // or $("foo") for mootools/prototype, whatever 
if (foo) 
    foo.focus(); 

私は今、原因がnullと& &怠惰flasyすることを考えても、それが実際のように書くことができます。

同様
var foo = document.getElementById("foo"); 
foo && foo.focus(); 

var clickHandler = function(event) { 
    event && event.foo && event.foo(); 
}; 


clickHandler({ 
    foo: function() { alert("bar"); } 
}); 

clickHandler(); 

私はこれを大部分または全く使用していませんでした。それがあると信じて私をリードパターン、:読みやすさのために、悪い

  • (ではない私にはとにかく)
  • は、それが

を失敗する場合は、それを使用し続けることが、私は安全アムましたか?

http://jsfiddle.net/td6We/1/と再生します。私はそれを壊すように見えることはできません...

答えて

1

それは安全ですですか?

はいは、を実行できるコードのコンテキストです。 ||&&の復帰メカニズムは一貫しており、明確に定義されています。 JS内の||&&の動作を理解していないプログラマーの周りで使用することは安全ではないかもしれません。

可読性ですか?

あなたの状況によって異なります。 dom要素に対してアクションを実行する場合は、ifステートメントを使用することを強くお勧めします。単一の文は、クロスブラウザの使用のために複数に変身するのは非常に簡単です:

if (foo) { 
    foo.bar(); 
    foo.baz(); 
} 

foo && foo.bar() 

はそれがはるかに読みやすいようだその時点で

foo && foo.bar(); 
foo && foo.baz(); 

に変わるかもしれませんしかし、ニッチなケースがあり、それがより多くのものに変わる可能性は低い。私は常にこの特定のステートメントスタイルを使用します:

console&&console.log(foo, bar, baz); 
関連する問題