检查jQuery插件中是否不存在方法

时间:2014-11-20 06:59:56

标签: jquery jquery-waypoints

我知道如何检查函数或插件是否存在,但这次我遇到了困难。这是我的情景。我已将JQuery Waypoints包含在我的代码中。现在我想使用$ .waypoint('sticky')函数,它正确地给了我错误

Error: The sticky method does not exist in jQuery Waypoints. 

我可以通过include the sticky shortcut script删除此错误。相反,我想检查这种方法是否存在。

我尝试了这些,但即使包含粘性快捷方式脚本,它们中的每个都会给我错误。

console.log($.isFunction( $.fn.waypoint.sticky));   //false
console.log($.isFunction( $.fn.waypoint('sticky')));      //false
console.log($.isFunction( $.fn.sticky));      //false

虽然这让我'真实'     console.log($。isFunction($ .fn.waypoint));

我有什么想法可以检查方法是否存在?

编辑:更多澄清: 默认情况下,粘贴方法在航点插件中不存在,当您包含粘滞快捷方式脚本时,这些代码行包​​含它:

$.waypoints('extendFn', 'sticky', function(opt) { .....  }

1 个答案:

答案 0 :(得分:0)

默认情况下存在的所有方法和添加了$.waypoints('extendFn', ... );的方法都存储在插件内,名为methods。它是私有的插件,因此无法从外部访问而无需修改它的源代码。

每次调用$.fn.waypoint('methodName')时,如果方法不存在或名称丢失,则会抛出错误。否则它执行方法并返回jQuery对象,而不是函数,因此$.isFunction() - 测试必须在所有情况下都失败。

但是你可以在$.waypoints命名空间中添加一些测试函数。它会对$.fn.waypoint进行测试,并在成功时返回true。如果失败,则会捕获抛出的错误并返回false

jQuery.waypoints.has = function(methodName) {
    try {jQuery.fn.waypoint(methodName)} catch(e) {return false}; return true;
};

将它包含在代码的开头但是在jQuery Waypoints之后。现在你可以做到:

console.log($.waypoints.has('next')); // --> true
console.log($.waypoints.has('noExist')); // --> false