Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在backbone.js模型中添加私有函数?_Javascript_Backbone.js - Fatal编程技术网

Javascript 如何在backbone.js模型中添加私有函数?

Javascript 如何在backbone.js模型中添加私有函数?,javascript,backbone.js,Javascript,Backbone.js,有没有一种方法可以使一个函数在主干网中成为私有的,这样它就只对模型本身公开,并且还可以访问这个 如何将updateTime设置为私有 var Timeline = Backbone.Model.extend({ url: 'servertime/', start: function(){ this.fetch({ success: function(timeline, response){

有没有一种方法可以使一个函数在主干网中成为私有的,这样它就只对模型本身公开,并且还可以访问这个

如何将
updateTime
设置为私有

   var Timeline = Backbone.Model.extend({
        url: 'servertime/',

        start: function(){
            this.fetch({
                success: function(timeline, response){
                    timeline.updateTime();
                    setInterval(function() {
                        timeline.updateTime();
                    }, 60 * 1000);
                }
            });
        },

        updateTime: function(){  //How can I make this private?
            this.time = ...
        }
    });

您可以通过将其封装在一个自调用匿名函数中来实现这一点,这样您就可以确保updateTime是私有的:

(function() {
  var updateTime = function(){  // this stays private to this anonymous function
    this.time = ...
  },
  Timeline = Backbone.Model.extend({
    url: 'servertime/',

    start: function(){
      this.fetch({
        success: function(timeline, response){
          updateTime.call(timeline);
          setInterval(function() {
            updateTime.call(timeline);
          }, 60 * 1000);
        }
      });
    }
  });

})();

您可以将
updateTime
设置为私有函数,但不能设置为私有方法。 我还建议在前面加一个下划线,以明确它是一个私有函数

(function() {
  function _updateTime(timeline){
    timeline.time = ...
  }

  Timeline = Backbone.Model.extend({
    url: 'servertime/',

    start: function(){
      this.fetch({
        success: function(timeline, response){
          _updateTime(timeline);
          setInterval(function() {
            _updateTime(timeline);
          }, 60 * 1000);
        }
      });
    }
  });

})();

此示例是错误的,因为
updateTime
不再是时间线方法,并且
具有错误的上下文。注意
updateTime.call(时间线)至关重要
以确保将正确的上下文传递给
updateTime
。对于函数与方法之间的特殊性,我们赞不绝口。添加下划线并不能说明它是私有函数;但是,将所有此类函数分组到名为_private或private(但不是“private”,因为这是一个保留字)的对象中,这样该函数就可以作为_private.updateTime()或private.updateTime()调用@GeorgeJempty:我不同意。在方法前面按约定加下划线表示该方法是私有的,即使该方法可以公开访问。我在JS设计模式书中读到了这一点。在这个例子中,Timeline被设置为一个显式的全局。如果要使用此闭包方法,可能需要查看requireJS或其他AWD库。