这不是一个正确的方式来调用我的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的功能从返回功能之外的正确方法?
谢谢。
当你正在返回popObj
,你closeId
将只得到了两个函数,而不是包裹在popObj
对象。为此,你会调用该函数像这样,不popObj
:
closeIt.closePop();
即使我添加了您的建议代码,它会调用该方法。而物体不会消失。为什么? – 3gwebtrain 2012-03-07 09:55:21
@ 3gwebtrain我的猜测是,既然你调用popupHandler而不传递任何参数'var closeIt = popupHandler();'当你在选择器中传递''popUp'变量时''popUp'变量将会是'undefined'(popUp ).fadeOut()'。 – 2012-03-07 10:05:27
是否有将方法或其他任何参数传递给淡出的唯一方法? – 3gwebtrain 2012-03-07 11:39:24
不是
closeIt.popObj.closePop()
你想
closeIt.closePop()
你popupHandler
功能返回的popObj
对象,它的上面有showPop
和closePop
功能。所以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”的,所以它属于该范围。
据我所知,'closeIt'已经是'popObj'的引用,因为'return popObj;'。 – 2012-03-07 09:36:13
'msg = msg ==='help'|| 'results';' – 2012-03-07 09:36:28
@roXon:'msg ==='help''返回'true'。所以你最终得到'msg'或者'true'或者''results''。 – 2012-03-07 09:37:39