人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Javascriptでprototypeプロパティについて質問です。
コンストラクタを実行してインスタンスのプロパティが設定されますが、

prototypeプロパティにプロパティを設定するメリットは何なのしょうか?

通常、インスタンスのプロパティが優先されるので使用の必要性がないと思うのですが。

Rectangle.prototype = {
width: 10, // ここ
getArea:function { return this.width * this.height; }
}

●質問者: pochi1234
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:JavaScript Prototype のし インスタンス コンストラクタ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● edvakf
●60ポイント ベストアンサー

下のように height と width を宣言するのでは、height のような宣言の仕方のほうが良いのではないかという質問ですか?

var Rectangle = function(){
 this.height = 10;
};
Rectangle.prototype = {
 width: 10,
 getArea: function(){return this.width * this.height;}
};
var rect = new Rectangle;
alert(rect.getArea());

この場合はどちらの宣言の仕方でも結果としては同じです。rect.width++ とやっても Rectangle.prototype.width が変更されるわけではないですし。

Google の出している JavaScript 最適化の記事には、できる限り width のような宣言の仕方をしたほうが、new する度に初期化のためのコードが走らないので良いとあります。

http://code.google.com/speed/articles/optimizing-javascript.html (Initializing instance variables の項)

width ぐらいだったらたいしたことないですが、getArea とかの関数だったら、何度も同じものを作るのは避けたいですね。


ただし、配列や連想配列を prototype で宣言する場合は、それが変更されないように注意しないといけません。

var Rectangle = function(){ };
Rectangle.prototype = {
 size: {width: 10, height: 10},
 getArea: function(){return this.size.width * this.size.height;}
};
var rect = new Rectangle;
rect.size.width = 20;
alert(Rectangle.prototype.size.width); // => 20

こういうことをしたいなら、コンストラクター内で毎回宣言しないとだめです。

◎質問者からの返答

インスタンス生成時に、prototypeプロパティにプロパティを指定する機会は上記の例以外ではなさそうですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ