2011-12-01 42 views
1

这可能是一个普通的javascript或jQuery问题 - 我正在使用backbone.js,我希望在一个类中有一个可由子类使用的私有方法。这可能吗?backbone.js中的封装

var fooView = Backbone.View.extend({ 
    initialize: function() { 
    this._privateFunc(); 
    }, 
    _privateFunc: function() { 
    ... 
    } 
}); 

var subFooView = fooView.extend({ 
    initialize: function() { 
    this.coolFunc(); 
    this._privateFunc(); 
    }, 
    coolFunc: function() { 
    ... 
    } 
}); 

但是,然后_privateFunc不暴露给外界。我很新的封装在JavaScript中,所以原谅我,如果有明显的答案。 :D

回答

3

您正在寻找的内容更准确地称为protected,而不是专用辅助功能。没有办法直接在JavaScript中实现。

您最好的选择可能只是揭露_privateFunc和使用,用下划线方法仅用于由子类使用的惯例。

你也可以实现在父__noSuchMethod__,然后检查,该方法是由一个子类,称为和执行受保护的方法。但是,这是一个Mozilla扩展。

5

如果你说的是真的私人,您可以尝试这样的事情...

var fooView; 
(function(){ 
    var _privateFunc = function() { 
     ... 
    } 

    fooView = Backbone.View.extend({ 
     initialize: function() { 
     _privateFunc.call(this); 
     } 
    }); 
})();