エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

JavaScriptの関数競合問題解決の個人的メモ

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)
    }
  }
}

これなら明示的に呼べるはず。
宣言はなるべくファイル名と同じにしたほうが、可読性が高いと思います。

疑問

ほんとに解決法として正しいのかなぁ、コレ?
もっと別な解決法があったら更新しますが、今、自分が知っている解決法の最善はコレです。
問題は見つけて自分なりに考えることが最近大切だと思い、周囲に気を配って問題を探すように心がけるようにしました。

踊る問題解決戦線

問題は会議室にあるんじゃない!現場に転がっているんだ!( ・ิω・ิ)
やっぱり課題は現場で見つけたほうが、リアリティといろんな人の考えや解決法が聞けて面白いですね。
若い子の意見は、自分を初心に帰らせる&後ろから追いかけられている感じがします。
ジャックの「追われるってのは気分が良い。自分がキングなのだと実感できる。」って言葉を思い出し、テンション上がります。
追い抜かれないように日々進化しなくては、と思いました。