信息
您所需的主题如下所示。但此主题未包含在此库中。

__proto__ 属性 (Object) (JavaScript)

包含对指定对象的内部原型的引用。

object.__proto__

object

必需。 要对其设置原型的对象。

__proto__ 属性可用于设置对象的原型。

该对象或函数继承新原型的所有方法和属性,以及新原型的原型链中的所有方法和属性。 对象可以仅有一个原型(不包括原型链中继承的原型),因此当您调用 __proto__ 属性时,将替换以前的原型。

您只能在可扩展对象上设置原型。 有关更多信息,请参见 Object.preventExtensions 函数 (JavaScript)

说明 说明

__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)中受支持。请参阅版本信息

在以下文档模式中不受支持:Quirks、Internet Explorer 6 标准模式、Internet Explorer 7 标准模式、Internet Explorer 8 标准模式、Internet Explorer 9 标准模式和 Internet Explorer 10 标准模式。在 Windows 8 中不受支持。

社区附加资源

显示:
© 2014 Microsoft