JavaScript __proto__
__proto__
一个对象的__proto__
属性和自己的内部属性[[Prototype]]指向一个相同的值
(通常称这个值为原型),原型的值可以是一个对象值也可以是null
(比如说Object.prototype.__proto__的值就是null
).该属性可能会引发一些错误,因为用户可能会不知道该属性的特殊性,而给它赋值,从而改变了这个对象的原型. 如果需要访问一个对象的原型,应该使用方法Object.getPrototypeOf
.
__proto__
属性已经被添加在了ES6草案 §B.3.1中.
语法
var proto = obj.__proto__;
注: 两个下划线,后跟五个字符"proto",最后又是两个下划线.
描述
当一个对象被创建时,它的 __proto__
属性和内部属性[[Prototype]]指向了相同的对象
(也就是它的构造函数的prototype
属性).改变__proto__
属性的值同时也会改变内部属性[[Prototype]]的值
,除非该对象是不可扩展的.
例子
下面,创建了一个新的Person
实例,然后看看它的 __proto__
属性是否等于它的构造函数的prototype属性
.
var Person = function(){ }; var p = new Person(); p.__proto__ === Person.prototype // true
这时, p
继承了 Person
, 但是如果给p.__proto__
赋另外一个对象值,则会改变它的继承对象:
p.__proto__ = Object.prototype
现在,p不在继承于
Person.prototype
, 而是直接继承了Object.prototype
, 也就丢失了所有从Person.prototype
继承来的属性.
可是,这只适用于可扩展的 对象,一个不可扩展的对象的 __proto__
属性是不可变的:
var obj = {}; Object.preventExtensions(obj); obj.__proto__ = {} //error
转自:https://developer.mozilla.org/zh-CN/docs/JavaScript/Reference/Global_Objects/Object/proto
posted on 2013-05-24 11:21 xdliu just 阅读(162) 评论(0) 编辑 收藏 举报