这不是一个正确的方式来调用我的obj函数吗?

这不是一个正确的方式来调用我的obj函数吗?

问题描述:

我有一个函数返回一个对象。在对象中,我有两个函数来显示弹出窗口并关闭它。它在父函数内工作,但它不是来自外部..是不是一个正确的方式来调用..否则我怎么能从外面调用obj函数?这不是一个正确的方式来调用我的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的功能从返回功能之外的正确方法?

谢谢。

+0

据我所知,'closeIt'已经是'popObj'的引用,因为'return popObj;'。 – 2012-03-07 09:36:13

+0

'msg = msg ==='help'|| 'results';' – 2012-03-07 09:36:28

+1

@roXon:'msg ==='help''返回'true'。所以你最终得到'msg'或者'true'或者''results''。 – 2012-03-07 09:37:39

当你正在返回popObj,你closeId将只得到了两个函数,而不是包裹在popObj对象。为此,你会调用该函数像这样,不popObj

closeIt.closePop(); 
+0

即使我添加了您的建议代码,它会调用该方法。而物体不会消失。为什么? – 3gwebtrain 2012-03-07 09:55:21

+1

@ 3gwebtrain我的猜测是,既然你调用popupHandler而不传递任何参数'var closeIt = popupHandler();'当你在选择器中传递''popUp'变量时''popUp'变量将会是'undefined'(popUp ).fadeOut()'。 – 2012-03-07 10:05:27

+0

是否有将方法或其他任何参数传递给淡出的唯一方法? – 3gwebtrain 2012-03-07 11:39:24

不是

closeIt.popObj.closePop() 

你想

closeIt.closePop() 

popupHandler功能返回popObj对象,它的上面有showPopclosePop功能。所以closeIt是对同一个对象的引用。

你应该只要致电:

closeIt.closePop(); 

没有必要在一个对象来包装这个,因为你立刻回去。

你可以写

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

现在closeIt.closePop();应该很好地工作。

正如我可以在c

popupHandler是一个函数,和popObj是当程序运行到

var closeIt = popupHandler(); 

它意味着该函数的返回结果 “popupHandler”

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

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

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

,所以你应该在代码closeIt.closePop(),但不closeIt.popObj.closePop(),

,而不是popObj.closePop()为好。

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