prototype

javascript-prototype.png

javascriptのprototypeとは?

function で作られた関数オブジェクトには prototype というプロパティが存在し、空のオブジェクトが格納されています。

そしてその関数が new 演算子とともにコンストラクタとして実行された際に、
new で作成されたオブジェクト(つまり関数内では this が表すオブジェクト) のプロトタイプとして関数の prototype プロパティのオブジェクトが設定されます。

JavaScript で obj のプロトタイプを参照するには Object.getPropertyOf(obj) を使用します。
逆に obj のプロトタイプとして proto を設定するには Object.setPrototypeOf(obj, proto) を利用します。

名前が非常に紛らわしいですが、 prototype はオブジェクトのプロトタイプを表すプロパティではありません。 prototype プロパティは「そのオブジェクトがコンストラクタとして利用された際に作成される新しいオブジェクト」のプロトタイプを決めるものです。 オブジェクトのプロトタイプを表すプロパティは __proto__ あるいは言語仕様書で [[Prototype]] と表されるもので prototype プロパティとは異なります。

var Constructor = function() {};
Constructor.prototype.a = 'Apple';
Constructor.prototype.b = 'Banana';
 
var instance = new Constructor();
 
console.log(Object.getPrototypeOf(instance) == Constructor.prototype);  // true
console.log(instance.a);  // 'Apple';
console.log(instance.b);  // 'Banana';

サポートサイト Wikidot.com