Javascript, Object.prototypeについて調べたのでメモメモ


今までJavascriptのprototypeについてよくわかっていなかったのでちょっと調べてみたのでメモ。
以前は、newしたときの動作が不明だったが、なんとなくわかった気がする。

//prototypeについての動作
stdObject = function(){}
stdObject.prototype.a = 'apple';
stdObject.b = 'orange';

obj = new stdObject;
console.log(obj.a); // apple ←引き継がれた (prototype.a)
console.log(obj.b); // undefined ← 引き継がれない
console.log(typeof obj.prototype) //undefined ←prototypeは無くなる

console.log(obj.n); //undefined
stdObject.prototype.n = "pine"; //元のオブジェクトを拡張してみる
console.log(obj.n); // pine ← 元オブジェクトのprototypeから参照される!

console.log(obj.hasOwnProperty("n")) // false ←obj自体に持ってない
obj.n = "berry";
console.log(obj.hasOwnProperty("n")) // true ←obj自体に持ってる

delete obj.n // 削除してみる
console.log(obj.n); //pine ← obj の n は消え、prototypeから参照されるようになった

// __proto__について
Firefoxの独自拡張らしく、IEでは参照できない。GoogleChromeには存在していた。
オブジェクトを new すると、オブジェクトのインスタンスを生成する。
この時に、インスタンスには、prototypeを引き継いだ__proto__ が生成される。
stdObject = function(){}
stdObject.prototype.a = "apple";
obj = new stdObject;
console.log(obj.__proto__); //object 
console.log( obj.__proto__.a ); //apple

関連記事:

  1. Javascript(jQuery) で オブジェクトとかタグの存在を確認する
  2. jQueryのプラグイン(高さ揃え)を書いてみるテスト
  3. Mantis バージョンアップしたらDokuwikiがエラーになった

Comments are closed.