我有一个返回对象的函数。在对象中我有两个功能来显示弹出窗口并关闭它。它在父函数中工作,但它不是从外面来的..是不是一种正确的方式来调用它...否则我如何从外面调用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 :(得分:4)
而不是
closeIt.popObj.closePop()
你想要
closeIt.closePop()
您的popupHandler
函数返回 popObj
对象,该对象上有showPop
和closePop
个函数。所以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”,所以它属于该范围。