プロトタイプベースを確認
ごめん、プロトタイプベースってみんな知ってるもんだった?
あんまりそういう操作してなかったせいだと思うけど、結構最近までJavaScriptがそういう言語だというのも、そういう動作するっていうのも分からずに使ってたかも。3年くらいときどき仕事で使ってたのに。
まぁ、くよくよしてもしょうがない。
とりあえずそろそろきっちりJavaScriptを5ページまで読んでみたところでプロトタイプベースってのが不思議な感じ。ページを参考にオブジェクト定義後にすぐプロトタイプを作らないでやってみた。
//初めは哺乳類オブジェクトMammalがない。 >>> Mammal Mammal is not defined //Mammalを定義 >>> var Mammal = function() {}; >>> Mammal function() //Mammalをnewしてmを定義 >>> var m = new Mammal() >>> m Object //↑なんかObjectだ //↓もちろんundefinedじゃないよ >>> undefined == m false //nameってプロパティはundifinedだ。 >>> undefined == m.name true //mにnameプロパティ追加してdogと命名! >>> m.name = 'dog' "dog" //↑dogだ //nameがundefinedじゃなくなった! >>> undefined == m.name false >>> m.name "dog" //↑もちろんdog //やっとMammalのプロトタイプを作ってみる。 //nameは'cat'で >>> Mammal.prototype.name = 'cat' "cat" //でも、Mammalのオブジェクトなのにm.nameは'dog'のまま。 >>> m.name "dog" //m.nameを消しちゃえ >>> delete m.name true //m.nameが'cat'になっちゃった >>> m.name "cat" //何回消してもm.nameは'cat' //プロトタイプのnameが'cat'になってるから >>> delete m.name true >>> m.name "cat" //プロトタイプのnameを消したる! >>> delete Mammal.prototype.name true //消えた。ほっ >>> undefined == m.name true
オブジェクトmからすると知らない間にプロパティのプロトタイプが作られたりするんですな。「プロパティをいくら消しても変な値が入ってるよー」ってことになっちゃうんすね。mが知らないうちにプロトタイプ作られちゃったから。m.nameを消しても'cat'が入ってるのが新鮮。
「だからプロトタイプなんだな!」って思った。
プロトタイプはJavaでのクラスの動的版ってイメージがしました。動きが面白いっすね。あと、プロパティを追加したり削除したり出来るあたりが「LLだな」って思いました。改めて。