我需要区分对象上的“纯”JavaScript属性和本机属性,如innerHTML
或style
。确定属性是Chrome/Firefox中的本机DOM属性
在Safari中我可以使用Object.getOwnPropertyDescriptor()
并检查configurable
财产(这是特殊性质的错误),但不幸的是这不会对Chrome或Firefox相同的结果(返回该属性是可配置)。
尝试在不同的浏览器上尝试this fiddle以查看问题。
有没有可靠的方法来确定属性是否是一个特殊的内部属性?
更新
我注意到,Firefox的实际返回undefined
如果你试图得到一个原生属性的属性描述符,这样有可能正常工作。这使Chrome浏览器不幸返回了一个属性描述符,看起来就像一个普通的属性。
例如,下面是innerHTML
描述符在Chrome:
{"value":"","writable":true,"enumerable":true,"configurable":true}
...这里名为 “测试” 的空字符串属性:
{"value":"","writable":true,"enumerable":true,"configurable":true}
完全一样。 :(
[ 'getOwnPropertyDescriptor()'](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor)似乎存在于Chrome 5+,FF 4+和IE8 +中。 – Blender
I don不要认为getOwnPropertyDescriptor实际上在做你认为的事情,它可以在任何o上设置属性也可能是不可配置的。您是否真的想知道对象的属性是否是本机属性,即由浏览器运行时提供的属性? – Geuis
是的,但我不关心显式的不可配置属性。主要是我需要告诉我是否可以重新定义一个属性,而不会破坏它的本地处理。 – devios1