嗨,我在 javascript 中有这两个对象
var john = { firstname: 'John', lastname: 'Smith' }
var jane = { firstname: 'Jane' }
这样做:
jane.__proto__ = john;
我可以访问简的财产和约翰的财产
例如,如果__proto__
在 IE8 中不支持,则相当于这样写:
jane.__proto__ = john;
谢谢!
嗨,我在 javascript 中有这两个对象
var john = { firstname: 'John', lastname: 'Smith' }
var jane = { firstname: 'Jane' }
这样做:
jane.__proto__ = john;
我可以访问简的财产和约翰的财产
例如,如果__proto__
在 IE8 中不支持,则相当于这样写:
jane.__proto__ = john;
谢谢!
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
__proto__
目前还不是标准用途。
遵循 ECMAScript 标准,符号 someObject.[[Prototype]] 用于指定 someObject 的原型。从 ECMAScript 5 开始,[[Prototype]] 使用访问器Object.getPrototypeOf()
和Object.setPrototypeOf()
.
所以你可以getPrototypeOf()
用来访问。
与镀铬一样,
> Object.getPrototypeOf(Object) === Object.__proto__
< true