0

在“Javascript The Definitive Guide”中阅读继承我读过

如果 [an object] 先前继承了属性 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具有 value的属性1

4

1 回答 1

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 循环返回属性的顺序(不应该如此,因为顺序不能保证并且浏览器之间的顺序也不一致,但这更有可能不同)。像素

于 2013-03-06T23:49:23.563 回答