- 締切済み
prototypeという予約後について
prototype プロトタイプ・キーワード。オブジェクトにプロパティを追加するときに使用する。 とのことですが、以下の2つは異なるのでしょうか? (1)---------------- var M = function(){}; M.val = 1; ------------------- (2)---------------- var M = function(){}; M.prototype.val = 1; ------------------- どう違うのかヒントください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- b0a0a
- ベストアンサー率49% (156/313)
「prototype」は予約語でも、狭義のキーワードでもありません。 「prototype」オブジェクト自体には何の特別な意味もありません。 ただ2つ重要な点があって、 1つは関数が生成されるときに自動的に作られること。 もう1つはnew演算子内で利用されることです。 new演算子は適応された関数の「prototype」プロパティをプロトタイプとしたオブジェクトを生成し、関数にthisとして渡す作業をするものです。 したがって、「prototype」オブジェクトに定義されたプロパティは、その関数に対しnew演算子を適応して生成される新しいオブジェクトのプロトタイプのプロパティになる。 つまりは新しいオブジェクトが継承してくれるものになるわけです。 対してただ関数にプロパティを定義しただけでは、それはただ関数オブジェクトのプロパティとしてあるだけで、特に特別な利用をされることはありません。
- Gotthold
- ベストアンサー率47% (396/832)
こんなふうに違う。 (1)---------------- var M = function(){}; M.val = 1; var objM = new M(); alert(objM.val); //==>undefined ------------------- (2)---------------- var M = function(){}; M.prototype.val = 1; var objM = new M(); alert(objM.val); //==>1 -------------------