1

我正在尝试检查 jQuery 是否具有对窗口对象的 .hashchange 方法引用,例如

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

但我在支持和不支持该功能的两种浏览器中不断收到“未捕获的类型错误:无法调用未定义的方法'hasOwnProperty'”。有任何想法吗?

4

2 回答 2

4

一种方法是查看属性是否只是未定义

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

注意:这实际上检查值是否已定义与名称。可以使用显式undefined值定义值,但两者对于您的场景可能是等效的

var x = {}
x.test = undefined;
x.hasOwnProperty("test") // true
x.test === undefined // true
于 2012-02-27T21:13:04.570 回答
0
$(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;
}

于 2012-02-27T21:14:07.327 回答