« pow-wowクリエーターの手によるTシャツ展に参加するですよ。 | メイン | 証明書(公開鍵)で暗号化するサンプルソース(C#) »



javascriptが判らなくなってきたのでやりなおし。

javascriptが判らなくなってきたのでやりなおし。をはてなブックマークに追加 javascriptが判らなくなってきたのでやりなおし。をdel.icio.usに追加  Yahoo!ブックマークに登録 javascriptが判らなくなってきたのでやりなおし。をGoogle Bookmarksに追加 javascriptが判らなくなってきたのでやりなおし。をtwitterにポスト
ウェブ関係の仕事をはじめて少し経ちます。社内インフラでサイトを構築することがこれまでもあったりしましたので今やっていることにそれほど抵抗はないのですが、javascriptをよく理解できなくなっていて困っています。これまでは関数列挙して実装していたような覚えがあって、やりたいことを目的別に調べて実装して動いてわーい♪(別のブラウザでは動かなくてショボーン)の世界かと思ってたのですがどうもちがう。
どう違うのかはちょっとおいて置いて、ワタシがプログラム言語を学んだのは C → C++ → java → C# といった感じで、オブジェクト指向を学んだのも C++ からでした。javascriptがオブジェクト指向だということも以前から判ってはいるのですが、「なんか書けばまぁうごく」というやる夫並にひどい着地の仕方をしておりまして、「スコープ?あんの?varて書かなくてもうごくよ?」「this?いやいや。thisてか、クラスは?」とかそれはそれは酷いことになっています。ヒドイ。
 <ワタシ>
          __
        .-´   ``ヽ
       / ⌒      `ヽ   javascriptなんて素人向けのg
     /        `ヽ  ヽ
((   / (●)          ヽ
    |::⌒(__   (● )     |
    ヽ   人__) ⌒::::      |
      ヽ(__ン          |
     人           /  | |
    /          _ノ  ノノ 
                |


          __
       .-´    ``ヽ
      /  ヽー     `ヽ えnあびゃぶ。
     / ノ    (O )ノ ̄ ̄`ヽ、―ニ  
    / (●) __)⌒/ ´`ヽ _  三,:三ー三,:
    | ::⌒(__ノ/  ノヽ--/ ̄ ,    `   ` ̄ ̄ ̄
   。ヽ 。   )(  }.  ...|  /!    
      ヽo (__ン  }、ー‐し'ゝL _  
     人  ー   jr--‐‐'´}    ;ーー------
    /        ヾ---‐'ーr‐'"==
                | 
それでもページに実装するスクリプトの規模がほんの数ステップなものですから、ちゃんと勉強する気にはなれなかったのですが、業務の上というかプライベートのほうで判らないことを調べていくにつれて、「え。。。なにやってんのこれ?」「何でこれで動くの?」といったことが多くなっていきます。

なぜ判らなくなってきたのか。

多分、数年前からjavascriptが再注目されて来ていた時にまったく見向きもしなかったため、昔のままの知識で取り残されたんだと思います。Ajaxなんてjavascirptで非同期にコンテンツをロードするだけでしょとか言いながらもその意味を全然わかってないのに見向きもしなかった。重ねてヒドイ。

で、以下になんぞこれ?と思った実装を記してみます。

オブジェクトリテラル

var hoge = {};
いきなり何がしたいのかもわからん。ブロックを返してんのか。空のブロックを返して何がしたいんだ。

■これはオブジェクトリテラルという表記法で、@ITCore JavaScript 1.5 Guide:Literalsに説明がありました。ふーん。へー。オブジェクトなのね。便利ね。

匿名・無名関数

var moge = function(){};
var fuga = new moge();
1行目は関数ポインタみたいなことか?てか、メソッド名は?2行目を見たら実はコンストラクタ?ふざけてんのか(ふざけてません)

そろそろきっちりJavaScriptに無名関数のことがかいてありました。
無名関数を採用するメリットには、「命名する必要の無い関数をシンプルに記述できる」「(複数ファイルのJavaScriptライブラリを読み込んでいるときなどにおいて)、既存の関数/変数名との衝突を回避できる」という点が挙げられる
ふーん。なるほど。ということはmogeは無名関数の別名かな。で、javascriptにおいては全ての関数はコンストラクタになりうるらしいのでnewしてオブジェクトの生成ができると。そういうものか。

オブジェクトリテラルとワンタイム(使い捨て)メソッド

var piyo = (function( fst, snd ){
    return {
        prop:fst,
        fuga:snd
    };
}( 1, 2 ));
もう、いろいろナニコレ。(function(){}())てなに?

■分解してみると、
1.この関数は無名関数である。
2.この無名関数は、オブジェクトリテラルを返しているようである。
までは、判りました。で、(function(){}())は無名関数を実行してるだけらしい。もちろん無名じゃなくともよいけど、無名関数だと自身をオブジェクトに渡すとかしないと呼びようがないので、定義しただけのものを実行したいのならこうするみたい。これは意外と腹に落ちた。

これらはここ数ヶ月でようやく知ったないようです。でもまだプロトタイプチェーンが腹に落ちてないので調べる。ちょっとjavascriptが自由すぎてびっくりしてる。

★このコンテンツに目的の情報はありませんでしたか?


[ 最近のエントリーとその関連エントリー ]


[ スポンサードリンク ]

トラックバック

このエントリーのトラックバックURL:
http://mojalog.com/cgi/mt/mt-tb.cgi/295

コメントを投稿

ツリータイプ・カテゴリー

open all | close all

リファラから検索


サイト内検索