一度作成されたオブジェクトのプロトタイプを変更(つまり、完全にスワップアウト)することはできません(ただし、JavaScriptの将来のバージョンでは可能になる可能性があります)。
ただし、JavaScriptのオブジェクトは非常に順応性があります。たとえば、これを行うことができます。
o.a = A.prototype.a;
...そして機能o
がありa
ます。の列挙可能なすべてのプロパティ(プロトタイプからのものを含む)をA.prototype
提供したい場合:
var name;
for (name in A.prototype) {
o[name] = A.prototype[name];
}
関数のprototype
プロパティは、関数の通常の退屈なプロパティに割り当てられた、完全に通常の退屈なオブジェクトです。new
その関数(「コンストラクター関数」と呼ばれる)を使用してオブジェクトを作成するために使用する場合、関数のプロパティprototype
は、基礎となるプロトタイプとして新しく作成されたオブジェクトに割り当てられます(コードで[まだ]アクセスできる名前はありません)。 。
ES5(Chrome、Firefox、Opera、およびIE9で合理的にサポートされています。IE8以前ではサポートされていません)では、を使用してオブジェクトのプロトタイプを取得できます。Object.getPrototypeOf
また、を使用してコンストラクター関数を実行せずに、プロトタイプを割り当てるオブジェクトを作成できますObject.create
。ただし、作成されたオブジェクトのプロトタイプを変更することはできません。
一部のJavaScriptエンジン(Firefoxのエンジンなど)には、現在非標準の拡張機能__proto__
があり、オブジェクトをプロパティとして扱うことで、オブジェクトのプロトタイプに直接アクセスして操作できます。例えば:
o.__proto__ = A.prototype;
...しかし、それは現在のところ標準ではありません。ただし、次の標準の一部になる可能性があります。今後のES6に関する情報に興味がある場合は、ドラフト仕様などをここで見つけることができます。