JavaScriptの競合
現場で、JavaScriptの関数競合が起きて、てんやわんやしてた。
自分が関与してない案件だったので、遠目で「大変そうだなぁ〜」くらいで見ていたが、自分がそういった状況に陥っても大丈夫なように、回避策を考えてみたのが、事の発端。
競合の例
話をスパイからチラッと聞いたが、だいたい以下みたいな感じ
<!-- test.html --> <html> <head> <script type="text/javascript" src="sample1.js"></script> <script type="text/javascript" src="sample2.js"></script> <body> <script> Sample(); </script> </body> <html>
// sample1.js function Sample() { alert(1); }
// sample2.js function Sample() { alert(2); }
「test.htmlを呼び出したら、意図せずにSample2.jsのSample()が呼ばれた。。orx」って話だった。
解決策としては擬似クラスを作るのが一番だと思っています。
(Java的な解決しか思いつかねぇ俺、ダメだなぁ〜。。。)
<!-- test.html --> <html> <head> <script type="text/javascript" src="sample1.js"></script> <script type="text/javascript" src="sample2.js"></script> <body> <script> sample1().Sample(); </script> </body> <html>
// sample1.js function sample1() { return { Sample : functioin() { alert(1) } } }
// sample2.js function sample2() { return { Sample : functioin() { alert(2) } } }
これなら明示的に呼べるはず。
宣言はなるべくファイル名と同じにしたほうが、可読性が高いと思います。
疑問
ほんとに解決法として正しいのかなぁ、コレ?
もっと別な解決法があったら更新しますが、今、自分が知っている解決法の最善はコレです。
問題は見つけて自分なりに考えることが最近大切だと思い、周囲に気を配って問題を探すように心がけるようにしました。
踊る問題解決戦線
問題は会議室にあるんじゃない!現場に転がっているんだ!( ・ิω・ิ)
やっぱり課題は現場で見つけたほうが、リアリティといろんな人の考えや解決法が聞けて面白いですね。
若い子の意見は、自分を初心に帰らせる&後ろから追いかけられている感じがします。
ジャックの「追われるってのは気分が良い。自分がキングなのだと実感できる。」って言葉を思い出し、テンション上がります。
追い抜かれないように日々進化しなくては、と思いました。