Javascript 为什么elem.hasOwnProperty()为false
我有一个点击处理器Javascript 为什么elem.hasOwnProperty()为false,javascript,properties,event-handling,click,Javascript,Properties,Event Handling,Click,我有一个点击处理器 e.addEventListener('click', this.Multiply, false); 和一个函数 this.Multiply = function () { APi.Multiply(this); }; 和简单的选择元素。 这就是Select元素 为什么要跑 this.selectedIndex 给出值=>2 但是运行this.getOwnPropertyNames()会抛出错误 或者this.hasOwnProperty('selectedI
e.addEventListener('click', this.Multiply, false);
和一个函数
this.Multiply = function () {
APi.Multiply(this);
};
和简单的选择元素。这就是Select元素 为什么要跑
this.selectedIndex
给出值=>2
但是运行this.getOwnPropertyNames()
会抛出错误
或者
this.hasOwnProperty('selectedIndex')
->给出false 这是因为selectedIndex实际上是HTMLSelectElement原型上的属性,而不是实例属性。要按您的意愿进行测试,您可以尝试以下方法:
this.__proto__.hasOwnProperty('selectedIndex');
或
你应该得到你期望的结果
当然,这假定这个的实例实际上是您选择的元素。当然,考虑到这个HTML:
<select id="example"></select>
会在控制台上打印true。我刚刚遇到一个问题,在chrome事件中。hasOwnProperty('data')->给出true,在FF事件中。hasOwnProperty('data')->false,这与PostMessage中的事件相同。原因是什么?如果你模拟一个小提琴,我可以在chrome和firefox中打开它来演示你的问题,我很乐意帮你看看。这个JSFIDLE我只需要从控制台运行事件侦听器功能。然后从iframe作用域运行postmessage和event.hasOwnProperty(数据)结果在browsersHmm中不同,这在@vickk中非常奇怪。Firefox似乎将数据定义为MessageEvent原型的一部分。我猜正是因为这个原因,hasOwnProperty失败了,因为它希望你看到原型。Chrome似乎并没有在这个问题上施加压力。你可以花点时间在谷歌上搜索,找出问题的症结所在,然后找到一个优雅的解决方案。或者,如果您只想在两种浏览器中快速修复,您可以将测试从单个hasOwnProperty更改为(event.u proto_uu.hasOwnProperty('data')| event.hasOwnProperty('data'))
<select id="example"></select>
var el = document.getElementById("example");
console.log(el.__proto__.hasOwnProperty('selectedIndex'));