Проверьте, существует ли метод jQuery - PullRequest
1 голос
/ 28 февраля 2012

Я пытаюсь проверить, имеет ли jQuery ссылку на метод .hashchange на объект окна, например

$(window).data('events').hasOwnProperty('hashchange') ?
    $(window).hashchange(hashChange) :
    window.onhashchange = hashChange;

но я продолжаю получать сообщение «Uncaught TypeError: Невозможно вызвать метод hasOwnProperty of undefined» в обоих браузерах, которые поддерживают и не поддерживают функцию. есть идеи?

Ответы [ 2 ]

4 голосов
/ 28 февраля 2012

Один из способов проверить, является ли свойство просто неопределенным

if ($(window).hashchange === undefined) {
  // Not defined
}

Примечание. Это фактически проверяет, определено ли значение по отношению к имени.Можно определить значение с явным значением undefined, но оба, вероятно, эквивалентны для вашего сценария

var x = {}
x.test = undefined;
x.hasOwnProperty("test") // true
x.test === undefined // true
0 голосов
/ 28 февраля 2012
$(window).data('events') === undefined

Для этого он имеет нет свойств.


Вам нужно сначала убедиться, что данные содержат объект:

var window_data = $(window).data('events');

if(window_data !== undefined){
   window_data.hasOwnProperty('hashchange') ?
    $(window).hashchange(hashChange) :
    window.onhashchange = hashChange;
}
else {
    window.onhashchange = hashChange;
}

...