访问继承的修改对象的原始属性
Accessing the original property of an inherited modified object
《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}
在这种情况下,是否有可能出于任何原因访问值为1
的属性x
?
你可以这样做:
delete p.x;
你也可以这样做:
p.constructor.prototype.x;
,但这不是特别健壮,因为构造函数属性是可写的,并且如果对象是使用object构造的。创建时,它的构造函数是Object函数,它的原型不是p
的原型。即使它引用了一个对象,它的prototype属性也可能不是你要找的对象。
你也可以这样做:
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 相关文章:
- JQuery:使用clone()生成的元素不采用原始的事件属性
- 骨干中的原始属性对象是什么
- jQuery's clone()函数扰乱了原始元素'的属性
- 在 JavaScript 中访问原始全局变量和属性
- 如何在规范化/取消规范化属性名称之前获取原始属性名称
- 想知道图片's的原始大小,并通过jQuery中的属性进行分配
- 如何将 jQuery 动画反转回原始 CSS 属性
- 如何从javascript中删除属性而不丢失它在原始对象
- 属性返回原始值,而不是通过方法调用更新的值
- 为什么旧的原型属性在替换原始原型对象后仍然可用
- 奇怪的代码——javascript (JS)中原始变量和引用变量的动态属性
- Html上点击改变属性;重新单击回到原始状态
- 原始异常:无法读取属性'值'的未定义
- JavaScript DOM api能得到属性&的原始大小写吗?标签的名字
- 如何使用 Jquery 或 Javascript 更改原始字符串中的 HTML 属性
- 在与原始模式相同的级别上重用远程JSON模式中的属性
- 访问继承的修改对象的原始属性
- 如何在jquery动画函数中传递原始显示属性
- 指令,包装内容并保留原始元素的属性
- 输入是否具有“原始值”属性