2015-08-14 2 views
2

У меня есть обработчик щелчкаПочему elem.hasOwnProperty() ложна

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

и функцию

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

и простой Выбрать элемент.
Так это получает Выберите элемент

Почему работает

this.selectedIndex 

дает значение => 2

Но работает this.getOwnPropertyNames() бросает ошибку

или this.hasOwnProperty('selectedIndex') -> дает ложные?

ответ

1

Это потому, что 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')); 

напечатает верны консоли.

+0

Я просто столкнулся с вопросом, где в хромированной event.hasOwnProperty («данные») -> дал истинную и в FF event.hasOwnProperty («данных») -> ложный Это было то же событие с PostMessage. В чем причина этого? – vickk

+0

Если вы издеваетесь над скрипкой, которую я могу открыть в хроме и firefox, чтобы продемонстрировать вашу проблему, я был бы рад взглянуть на вас. –

+1

this jsfiddle https://jsfiddle.net/xgwcbexw/1/ Мне просто нужно запустить функцию прослушивания событий с консоли. Затем из области iframe запустите postMessege и event.hasOwnProperty (данные) результат отличается в браузерах – vickk