我知道如何检查函数或插件是否存在,但这次我遇到了困难。这是我的情景。我已将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) { ..... }
答案 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