私がどうして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');←hogeにHogeを入れるよ
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を理解できないのか。
理解できない。まではいってなくとも理解しようとしないと言った程度ですけど。