「prototype」という名前のプロパティは単なるプロパティであり、オブジェクトの継承元のオブジェクトを指していません。Object.getPrototypeOf
または非標準__proto__
プロパティを使用して取得します。
したがって、関数obj(me)
が返すのは、文字列を指すプロパティ「name」を持つオブジェクトを指すプロパティ「prototype」を持つオブジェクトkeith
です。関数はオブジェクトを返すため、new
キーワードを使用して呼び出されても呼び出されなくても違いはありません。
継承の場合、コンストラクター関数[object]の「prototype」プロパティが問題になります。このコンストラクターによって作成された(オブジェクトを返さない)すべてのオブジェクトは、キーワードを使用して、コンストラクターnew
の「プロトタイプ」プロパティが指すオブジェクトから継承します。だからあなたはこれを行うことができます:
var Constructor = function() {
console.log(this); // logs the currently created object
// return nothing
}
Constructor.prototype = { name: 'keith' };
var a = new Constructor(); // logs an empty object
Object.getPrototypeOf(a) === Constructor.prototype; // true
a.name; // "keith" - inherited