ネットランダム改変

はてなダイアリーからはてなブログにインポート。

私がどうしてJavascriptのprototypeを理解できないのか。

http://blog.xole.net/article.php?id=560

javascriptのprototypeはなかなか理解できないですね。
ここ1年間でマジマジと実感しました。

特に、大規模開発をしているので、いろんな知識が入り乱れていて(ホームページ時代からAjax本に移り読んでるので)が、javascriptが単なる関数型列挙な言語(語弊があるけど)という見方をしてしまいがちです。そんな中で "String.prototype.trim" みたいなコードを見せられても、理解下手なのか中々上手く伝わってこないですねぇ。

ということで(?)、僕がjavascriptのprototypeの何が理解できないのか、とか。これも備忘

prototype.jsソースコードを眺める

Array.mapとかEnumerable, Hashはいきなり理解できないですねー。ただ、prototype継承すらわからないので、ちょっと多すぎなこともあります。

var hoge = someone();←誰か(someone)をhogeに入れるよ
for(var property in hoge){hogeの間ループするよ
if(hoge.hasOwnProperty(property){hogeの持ち物だったら
}
}

実際に作ってみる。

やっぱインタフェースみたいなものは欲しいんですかね。ってことで書かかれてますが理解までの溝が深まる気がする。

var MyObject = function (){};←関数(function)をMyObjectに入れるよ
MyObject.prototype = {←MyObjectを定義するよ
message: null,←メッセージ(message)にnullをバインドするよ
hello: function (){←挨拶(hello)に関数(function)をバインドするよ
return this.message;←このメッセージ(this.message)を返すよ
}
};

var Hoge = function (message){←関数(function (message))をHogeに入れるよ
this.message = message;←このメッセージ(this.message)にmessageを代入するよ
};
Hoge.prototype = new MyObject;←関数(function (message))をHogeに入れるよ

var hoge = new Hoge('hello');hogeHogeを入れるよ
alert(hoge.hello());←アラートでhoge.hello()を出力
alert(hoge instanceof MyObject);←アラートでhoge instanceof MyObjectを出力

プロトタイプ継承のcloneを眺めてた。

たかだかclone、されどclone。なのに、非常に多くのことが詰まってるらしい。これはjavascriptのprototypeを身に着けるなら必須らしい。

多くのことが詰まっているため省略

関数を非同期化するやつを眺める

あまり実用性が無いと思ってますが、結構使えるらしいです。prototype.jsのbindと同じように使うとなお便利らしい。

setTimeoutはつかったことあるが、prototypeがからむと何でこんなに難読なんだ?

LDRのアイテムを読み耽る

いやーあれは色々勉強になりますねぇ。
jやkを押すだけで十分理解が深まった気分になれました。

GUI操作はプログラミングより面白い」のはあながち。ですね。

(中略)

私がどうしてjavascriptのprototypeを理解できないのか。
理解できない。まではいってなくとも理解しようとしないと言った程度ですけど。