2016-01-06 228 views
1

我遇到了Javascript中命名函数的问题。从javascript中的其他命名函数调用命名函数

我有这个重载函数

SN.Reload = function(settings) { 

     var _timer = null; 
     var $grid = null; 

     var init = function() { 

      $grid = $(settings.wrapperSelector); 

      if (_timer > 0 || _timer != null) 
       _timer = settings.timer; 
      else 
       _timer = 600000; 

      window.setInterval(function() { 

       LoadData(); 

      }, _timer); 

     }; 

     var LoadData = function() { 

      $.ajax({ 
       url: '/data.json', 
       type: 'GET', 
       dataType: 'json', 
       cache: false, 
       success: UpdateData, 
       error: DataErrorHandler 
      }); 

     }; 
} 

在正常状态下,这将在X分钟运行LoadData功能 - 这按预期工作。

我现在有另一个名为功能

SN.CreateJsonFromDate = function (settings) { 

.... 

    var SuccessLoad = function() { 

     _dateLoader.hide(); 
     _wrapper.slideUp(); 



    } 
} 

是否有可能使用LoadData从SN.Reload里面SN.CreateJsonFromDate的SuccessLoad功能?

上成功的LoadData函数调用UpdateData的更新从JSON数据的HTML,我想在SN.CreateJsonFromDate再次调用此功能,因为这将产生一个新的JSON文件。

+0

看起来像私人功能。 –

+0

挂上......我可以澄清一下,“SN.Reload”的意图是声明一些变量(其中一些是函数),然后对它们不做任何处理并放弃它们? – Katana314

+0

@ Katana314 - 是的,你可以澄清,但它没有区别。 'LoadData'只能在'SN.Reload'的范围内访问,并且在编写代码时不能在其外部访问。 – Adam

回答

2

没有,因为根本LoadData没有的SN.Reload

范围之外的存在。如果你想重新使用LoadData功能,不限制它的范围是内SN.Reload,而是,也许(这取决于什么你想要的),附加到命名空间为SN.LoadData

+0

是的。问题是范围!重写了整个脚本以使重载功能可用,并且它现在正在工作!谢谢! –

2

是的,如果你实例化SN.Reload。 例如:

var obj = new SN.Reload(settings); 

那么你可以使用LoadData从这个对象,像这样:

obj.LoadData(); 

是的,你有LoadData公众使​​用本作:

this.LoadData = function(){/*your code*/}