访问继承的修改对象的原始属性

时间:2013-03-06 22:46:46

标签: javascript inheritance

阅读" Javascript The Definitive Guide"我读了

  

如果[一个对象]先前继承了属性x,那么该继承的属性现在会被新创建的具有相同名称的属性隐藏。

我创建了一个更好地理解它的例子

var o = {x:1};
var p = Object.create(o);
p.x = 5;
console.log(p.x); //5
console.log(p); //Object {x: 5, x: 1} 

在这种情况下,是否可以以任何理由访问值为x的媒体资源1

1 个答案:

答案 0 :(得分:1)

你可以这样做:

delete p.x;

您也可以这样做:

p.constructor.prototype.x;

但由于构造函数属性是可写的,并且如果使用Object.create构造对象,那么它不是特别健壮,它的构造函数是Object函数,它的原型不是p的原型。即使它引用了一个对象,它的原型属性也可能不是你寻找的对象。

你也可以这样做:

p.__proto__.x;

但这是非标准的,并非在所有浏览器中都支持,__proto__的未来似乎不确定。

所以也许最好做一些事情:

if (p.hasOwnProperty('x')) {
  var x = p.x;
  delete p.x;
  var x2 = p.x;
  p.x = x;
}

但是请注意,如果这很重要,这可能会影响从for..in循环返回属性的顺序(不应该因为顺序不能保证并且浏览器之间不一致,但这会使它更可能是不同的)。     p.x