了解回调函数的差异

时间:2014-06-17 11:26:04

标签: javascript jquery callback

我的代码:

 checkIsMotoOrEcomerce: function(booAnim) {
    var objIsEcmOrMto = $('.isMotoOrEcm'),
            objEcom = objIsEcmOrMto.filter('[name="ecommerce"]'),
            objMoto = objIsEcmOrMto.filter('[name="moto"]'),
            objMotoBox = $('.motoBox'),
            objEcmBox = $('.apiIntegrationBox'),
            strBehaviorShow,
            strBehaviorHide,
            objMain = this;


    if (booAnim) {
        strBehaviorShow = 'slideDown';
        strBehaviorHide = 'slideUp';
    } else {
        strBehaviorShow = 'show';
        strBehaviorHide = 'hide';
    }
    if (objEcom.is(':checked')) {
        objEcmBox[strBehaviorShow](objMain.checkIsMotoOrEcmVisible());
    } else {
        objEcmBox[strBehaviorHide](objMain.checkIsMotoOrEcmVisible());
    }
    if (objMoto.is(':checked')) {
        objMotoBox[strBehaviorShow](objMain.checkIsMotoOrEcmVisible());
    } else {
        objMotoBox[strBehaviorHide](objMain.checkIsMotoOrEcmVisible());
    }        
},
checkIsMotoOrEcmVisible: function() {
    var objMotoBox = $('.motoBox'),
            objEcmBox = $('.apiIntegrationBox');

    if (objMotoBox.is(':visible') && !objEcmBox.is(':visible')) {
        console.log('moto');
    } else if (!objMotoBox.is(':visible') && objEcmBox.is(':visible')) {
        console.log('eccomerce');
    } else if (objMotoBox.is(':visible') && objEcmBox.is(':visible')) {
        console.log('both');
    } else {
        console.log('none');
    }
  }

我无法理解为什么这是第一次运行,但是当我第二次运行时它的返回错误“Uncaught TypeError:undefined不是函数”。

当我使用此代码时:

    if (objEcom.is(':checked')) {
        objEcmBox[strBehaviorShow](objMain.checkIsMotoOrEcmVisible);
    } else {
        objEcmBox[strBehaviorHide](objMain.checkIsMotoOrEcmVisible);
    }
    if (objMoto.is(':checked')) {
        objMotoBox[strBehaviorShow](objMain.checkIsMotoOrEcmVisible);
    } else {
        objMotoBox[strBehaviorHide](objMain.checkIsMotoOrEcmVisible);
    }        

它不会返回任何错误,只能在首次运行时使用。 您能帮我理解使用objMain.checkIsMotoOrEcmVisible()objMain.checkIsMotoOrEcmVisible

之间的区别吗?

为什么当我放置函数名称而不是调用object propety时,所有接缝都能正常工作?

    function blabla() {
        var objMotoBox = $('.motoBox'),
                objEcmBox = $('.apiIntegrationBox');

        if (objMotoBox.is(':visible') && !objEcmBox.is(':visible')) {
            console.log('moto');
        } else if (!objMotoBox.is(':visible') && objEcmBox.is(':visible')) {
            console.log('eccomerce');
        } else if (objMotoBox.is(':visible') && objEcmBox.is(':visible')) {
            console.log('both');
        } else {
            console.log('none');
        }
    }


    if (objEcom.is(':checked')) {
        objEcmBox[strBehaviorShow](blabla());
    } else {
        objEcmBox[strBehaviorHide](blabla());
    }
    if (objMoto.is(':checked')) {
        objMotoBox[strBehaviorShow](blabla());
    } else {
        objMotoBox[strBehaviorHide](blabla());
    }

0 个答案:

没有答案