对象的原型一旦创建就不能更改(即完全换出)(但是;在 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 的信息感兴趣,可以在此处找到规范草案等。