3

嗨,我在 javascript 中有这两个对象

var john = { firstname: 'John', lastname: 'Smith' }

var jane = { firstname: 'Jane' }

这样做:

jane.__proto__ = john;

我可以访问简的财产和约翰的财产

例如,如果__proto__在 IE8 中不支持,则相当于这样写:

jane.__proto__ = john;

谢谢!

4

2 回答 2

9

IE 中没有等效或标准机制。(__proto__Firefox 中的属性是ECMAScript 标准中未指定的非标准扩展。)

[[prototype]] 对象只能通过在构造新对象之前作为构造函数的函数对象上设置prototype属性来指定。但是,[[prototype]] 可以在以后进行变异

无论如何,这里有一个从现有对象指定 [[prototype]] 的小例子。请注意,必须在创建新对象之前完成 [[prototype]] 分配。ECMAScript 第 5 版引入了Object.create,它可以执行以下操作浅克隆对象。

function create (proto) {
    function f () {}
    f.prototype = proto
    return new f
}
var joe = create({})
var jane = create(joe)
joe.name = "joe"                   // modifies object used as jane's [[prototype]]
jane.constructor.prototype === joe // true
jane.__proto__ === joe             // true  -- in Firefox, but not IE
jane.name                          // "joe" -- through [[prototype]]
jane.constructor.prototype = {}    // does NOT re-assign jane's [[prototype]]
jane.name                          // "joe" -- see above
于 2012-09-14T21:04:06.420 回答
0

__proto__目前还不是标准用途。

遵循 ECMAScript 标准,符号 someObject.[[Prototype]] 用于指定 someObject 的原型。从 ECMAScript 5 开始,[[Prototype]] 使用访问器Object.getPrototypeOf()Object.setPrototypeOf().

所以你可以getPrototypeOf()用来访问。

与镀铬一样,

> Object.getPrototypeOf(Object) === Object.__proto__
< true
于 2015-07-20T07:25:41.477 回答