javascript - 为什么 elem.hasOwnProperty() 是假的

标签 javascript properties event-handling click

我有一个点击处理程序

e.addEventListener('click', this.Multiply, false);

和一个函数

this.Multiply = function () {
    APi.Multiply(this);
};

和简单的选择元素。
所以这得到了 Select 元素

为什么要运行

this.selectedIndex 

给出值(value)=> 2

但是运行 this.getOwnPropertyNames() 会抛出错误

this.hasOwnProperty('selectedIndex') -> 给出 false?

最佳答案

这是因为 selectedIndex 实际上是 HTMLSelectElement 原型(prototype)上的属性,而不是实例属性。要根据需要进行测试,您可以尝试类似的方法:

this.__proto__.hasOwnProperty('selectedIndex');

this.constructor.prototype.hasOwnProperty('selectedIndex');

您应该会得到预期的结果。

当然,假设您的 this 实例实际上是您选择的元素。当然给定这个 HTML:

<select id="example"></select>

运行这个javascript:

var el = document.getElementById("example");
console.log(el.__proto__.hasOwnProperty('selectedIndex'));

将在控制台打印 true。

关于javascript - 为什么 elem.hasOwnProperty() 是假的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32007854/

相关文章:

javascript - 如何引用其中包含连字符的 JavaScript 对象属性?

javascript - 如何将普通js函数注册到 Angular 中的@Output

javascript - Ionic 2过滤本地json文件

JavaScript Inside AJAX 请求更多 AJAX

javascript - d3.js 中日期的默认表示形式是什么?

JavaScript 函数绑定(bind)(this 关键字)在赋值后丢失

Tomcat + 管理属性文件

python - 什么时候将事物存储为实例的一部分与返回它们?

javascript - 我是否始终需要应用函数(匿名或其他方式)来为事件处理程序传递 JavaScript 参数?

c# - 如何删除 'Click' 的 'Button' 事件的所有事件处理程序?