【问题标题】:jQuery test for whether an object has a method?jQuery测试一个对象是否有方法?
【发布时间】:2011-07-03 18:57:31
【问题描述】:

是否可以测试 jQuery 对象是否具有特定方法?我一直在寻找,但到目前为止没有成功。谢谢!

【问题讨论】:

  • 你的意思是!!$obj.method?还是比这更复杂?
  • @sdleihssirhc 条件语句中不需要!!
  • @Nyuszika7H 我的意思是检查真实性。但是仅使用$obj.method 很难理解这一点,因此我添加了刘海以进行澄清。
  • @sdleihssirhc 没问题,有not much speed difference
  • 你有一个很好的答案here

标签: jquery


【解决方案1】:

这应该可行:

if (!!$.prototype.functionName)

【讨论】:

    【解决方案2】:

    由于 jQuery 方法是原型转化为 jQuery 对象,您可以从原型对象中对其进行测试。

    if( $.isFunction( $.fn.someMethod ) ) {
        // it exists
    }
    

    这使用jQuery.isFunction()[docs] 方法来查看$.fn.someMethod 是否确实是一个函数。 (在 jQuery 中jQuery.fn 是对原型对象的引用。)

    【讨论】:

    • +1。这是唯一真正检查它是否是可调用函数,而不仅仅是成员变量...
    • 对于其他可能和我一样慢的人:例如,如果您正在检查 UI Tabs 方法是否存在,请使用$.isFunction($.fn.tabs)。嘿,我需要一个具体的例子;也许其他人也会这样做。
    • 在 3.3.0 中已弃用
    【解决方案3】:

    试试

    if ($.fn.method) {
        $('a').method(...);
    }
    

    if ($.method) {
        $.method(...);
    }
    

    【讨论】:

    • -1,您在第一个示例中不必要地调用了 jQuery,这会慢 90% 以上! jsperf.com/jquery-vs-jquery-fn
    • if ($.method) { 对我不起作用。我不得不使用if ($.fn.method) {
    【解决方案4】:
    //Simple function that will tell if the function is defined or not
    function is_function(func) {
        return typeof window[func] !== 'undefined' && $.isFunction(window[func]);
    }
    
    //usage
    
    if (is_function("myFunction") {
            alert("myFunction defined");
        } else {
            alert("myFunction not defined");
        }
    

    【讨论】:

      【解决方案5】:

      这对我有用

      if (typeof myfunctionname === 'function')
      

      【讨论】:

        【解决方案6】:

        你应该可以找到未定义的

        if( typeof jQuery("*").foo === "undefined" ){
          alert("I am not here!");
        }
        

        【讨论】:

        • 您可以通过在不需要时不获取每个元素来进行一些优化:)
        猜你喜欢
        • 2013-03-18
        • 2021-02-16
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 1970-01-01
        • 2010-10-03
        • 2019-07-27
        • 1970-01-01
        相关资源
        最近更新 更多