为什么 elem.hasOwnProperty() 是错误的
Why elem.hasOwnProperty() is false
我有一个点击处理程序
e.addEventListener('click', this.Multiply, false);
和一个函数
this.Multiply = function () {
APi.Multiply(this);
};
和简单的 Select 元素。
所以这得到 Select 元素
为什么 运行
this.selectedIndex
给出值 => 2
但是运行 this.getOwnPropertyNames()
抛出错误
或 this.hasOwnProperty('selectedIndex')
-> 给出错误?
这是因为 selectedIndex 实际上是 HTMLSelectElement 原型上的一个 属性 而不是实例 属性。要根据需要进行测试,您可以尝试类似的方法:
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。
我有一个点击处理程序
e.addEventListener('click', this.Multiply, false);
和一个函数
this.Multiply = function () {
APi.Multiply(this);
};
和简单的 Select 元素。
所以这得到 Select 元素
为什么 运行
this.selectedIndex
给出值 => 2
但是运行 this.getOwnPropertyNames()
抛出错误
或 this.hasOwnProperty('selectedIndex')
-> 给出错误?
这是因为 selectedIndex 实际上是 HTMLSelectElement 原型上的一个 属性 而不是实例 属性。要根据需要进行测试,您可以尝试类似的方法:
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。