__proto__ 属性 (Object)
包含对指定对象的内部原型的引用。
语法
object.__proto__
参数
object
必要参数。要对其设置原型的对象。
备注
__proto__属性可用于设置对象的原型。
该对象或函数继承新原型的所有方法和属性,以及新原型的原型链中的所有方法和属性。对象仅可以有一个原型(不包括原型链中继承的原型),因此当你调用__proto__属性时,可以替换以前的原型。
您只能在可扩展对象上设置原型。欲进一步了解,请参阅Object.preventExtensions 函数。
Note
__proto__属性名称以两个下划线开始和结束。
示例
下面的代码示例显示如何为对象设置原型。
function Rectangle() { } var rec = new Rectangle(); if (console && console.log) { console.log(rec.__proto__ === Rectangle.prototype); // Returns true rec.__proto__ = Object.prototype; console.log(rec.__proto__ === Rectangle.prototype); // Returns false }
示例
下面的代码示例演示如何通过将属性添加到原型来将其添加到对象中。
var proto = { y: 2 }; var obj = { x: 10 }; obj.__proto__ = proto; proto.y = 20; proto.z = 40; if (console && console.log) { console.log(obj.x === 10); // Returns true console.log(obj.y === 20); // Returns true console.log(obj.z === 40); // Returns true }
示例
下面的代码示例通过在String对象上设置新原型,将特性添加到该对象。
var stringProp = { desc: "description" }; String.__proto__ = stringProp; var s1 = "333"; var s2 = new String("333"); if (console && console.log) { console.log(String.desc === "description"); // Returns true console.log(s1.desc === "description"); // Returns false console.log(s2.desc === "description"); // Returns false s1.__proto__ = String; // Can't be set. s2.__proto__ = String; console.log(s1.desc === "description"); // Returns false console.log(s2.desc === "description"); // Returns true }
必备条件
在Internet Explorer 11标准文档模式下支持此项。此外,也在应用商店应用(Windows 8.1和Windows Phone 8.1)中受支持。请参阅版本信息。
在以下文档模式中不受支持:怪异模式、Internet Explorer 6标准模式、Internet Explorer 7标准模式、Internet Explorer 8标准模式、Internet Explorer 9标准模式和Internet Explorer 10标准模式。在Windows 8中不受支持。