javascript中的私有方法

时间:2011-07-14 14:13:36

标签: javascript prototype-programming

在我的应用程序中,我必须为其他人构建一个独立的lib,所以我创建了这样的新对象:

function MyService(){
  //xxxxxxx...
}

MyService.prototype.login=function(name,pass){
  //here 
}

MyService.prototype.LoadDataFromServer(){
  //use the ajax get data from server,when get the data,I will eval them :

  var data=parseData(request.responseText);
  //now,the parseData is a private method which should not be exposed to the user,but it need the reference of the MyService object(this),so I have to use the following code:

  var this_ref=this;
  function parseData(res){
    this_ref.xxxx=.....
  }
}

MyService.prototype.parseData=function(res){
  this.xxxxx=....
}

这将使paresData函数成为用户。

现在,我想知道哪个更好?

2 个答案:

答案 0 :(得分:2)

如果你想要私有数据/方法,你应该更好地使用闭包。

var MyService = (function() {
    // define "private" methods
    var _login = function(name, pass) {
          ...
        },
        _loadDataFromServer = function() {
            ....
        },
        _parseData = function(res) {
            ...
        };

     //return "public" methods
     return {
         login: _login,
         loadDataFromServer: _loadDataFromServer
     };
}()); // execute function immediately

MyService现在只有两个“公共”功能,loginloadDataFromServer您仍然可以从公共功能访问“私有”功能,但您无法直接访问任何公共功能“私有”方法MyService._login('test','pass');会失败,但MyService.login('test','pass');会有效。请参阅此示例http://jsfiddle.net/EXrDW/

答案 1 :(得分:0)

没有“更好”的答案,只有你觉得更舒服。很多人似乎采用的是将下划线放在用户不应访问的方法前面的做法。