这不是调用我的obj函数的正确方法吗?

时间:2012-03-07 09:32:59

标签: javascript jquery

我有一个返回对象的函数。在对象中我有两个功能来显示弹出窗口并关闭它。它在父函数中工作,但它不是从外面来的..是不是一种正确的方式来调用它...否则我如何从外面调用obj函数?

我的职能:

var popupHandler = function(handler,msg,popUp){

    msg =  msg == "help" ? "help" : "results"
    $(handler).click(function(){
        popObj.showPop(); //works
    })
    $('.cls-how2play').click(function(){
        if(msg == 'help') popObj.closePop(); //works
    });

    var popObj = {
        showPop  : function(){
                    if(!(popUp).is(':visible')) $(popUp).fadeIn().children().find('.'+msg).show().siblings().hide();
                },
        closePop : function(){
                    $(popUp).fadeOut()
                }
    }
    return popObj;
}

来自这样的ouside:

 $('.ui-footer').click( function(){ 
  var closeIt = popupHandler(); 
  closeIt.popObj.closePop() }) //not works.. why?
}

任何人都可以帮助我从返回函数外部调用obj函数的正确方法吗?

感谢。

5 个答案:

答案 0 :(得分:4)

而不是

closeIt.popObj.closePop()

你想要

closeIt.closePop()

您的popupHandler函数返回 popObj对象,该对象上有showPopclosePop个函数。所以closeIt是对同一个对象的引用。

答案 1 :(得分:2)

当您返回popObj时,您的closeId将只获得两个函数,而不包含在popObj对象中。因此,您将调用此函数,而不使用popObj

closeIt.closePop();

答案 2 :(得分:1)

您应该致电:

closeIt.closePop();

答案 3 :(得分:1)

没有必要将它包装在一个对象中,因为你立即返回它。

你可以写

return{
showPop  : function(){
                    if(!(popUp).is(':visible')) $(popUp).fadeIn().children().find('.'+msg).show().siblings().hide();
                },
        closePop : function(){
                    $(popUp).fadeOut()
                }
}

现在closeIt.closePop();应该可以正常使用。

答案 4 :(得分:1)

我可以

popupHandler是一个函数,popObj是函数“popupHandler”的返回结果

当程序运行到

var closeIt = popupHandler();

它表示“closeIt”由函数“popupHandler”的结果赋值,obj与“popObj”相同。

你可以认为“closeIt”是“popObj”的副本。

和“popObj”不是“closeIt”的属性,它们是相同的。

所以你应该编写closeIt.closePop(),但不要编写closeIt.popObj.closePop(),

而不是popObj.closePop()。

因为popOHj在popupHandler的声明中是“var”,所以它属于该范围。