阅读" 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
?
答案 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