インテリ2

こんにちは、マイクロソフトから来ました。嘘です。

コード

前の会社で書いた JavaScript ライブラリは古くって臭くなっていたので、別に誰にあげるともなくそのまま辞めてきてしまったのですが、この度新しい会社で改めて JavaScript なんぞをごそごそと書くことになり「あー!あれがあれば!」「おー!あのライブラリはまた書き直しか!!」とか思いながら励んでいるわけでございます。

で、自宅の PC にもいくつか家で書いたライブラリがあったので、それを流用しようとか思って送って会社の Visual Web Developer で開いてびびった。次のコードなんですが。

(function(){
  function _createNamespace(/*String*/fqn) {
    var leaves = fqn.split(".");
    var headLeaf = leaves[0];
    var w = window;
    for(var i=0; i<leaves.length; ) {
      if(w[headLeaf] && typeof w[headLeaf] != "object") {
        throw("You are trying to overwrite existing " + typeof w[headLeaf] + ". : " + fqn);
      }
      w[headLeaf] = w[headLeaf] || {};
      w = w[headLeaf];
      headLeaf = leaves[++i];
    }
    return w;
  }
  var base = _createNamespace("Oogatta.UnkoUtil.Namespace");
  
  base.createNamespace = _createNamespace;
}());

何ってこれ、ネームスペース確保するだけの奴で、よく見ませんか?こういう奴

var Oogatta = Oogatta || {};

とか

if ( Oogatta == undefined ) {
  var Oogatta = {}
}

とかっての。これがもうファッキン面倒とか思って書いたのに、一度も使われることなく眠っていたほこりっぽいコードで、こんなのはまあどうでもいいんです。

インテリ

上のJSをまあ unko.js なんかで保存しといて、軽く呼び込んでみます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    
    <script type="text/javascript" src="unko.js"></script>
    <script type="text/javascript">
    try {
        Oogatta.
    }
    catch(message) {
        alert(message);
    }
        
    </script>
</head>
<body>

</body>
</html>

ここで Oogatta. まで打ち込んだ時の、驚きの瞬間をどうぞ!

これ、一体どうやってインテリってるんですかね…。単にドットで繋がった文字列のつながりがコード上に登場したから…、って思ったけど、そう考えると最後にメソッドを補完してるところがあり得ないし…。

いやいや、びっくりさせられっぱなしです!

ちなみに Firefox3 の Firebug 1.2 β4

ですが、uncaught exception が Console に出てこないのはバグなのでしょうか…。FF2 の 1.05 だと出てくるのに…。