Javascript文字对象中的私有var

时间:2011-12-06 15:32:34

标签: javascript private var object-literal

如何在文字对象中声明私有var?我保留了这段代码:

var foo = {

    self: null,

    init: function() {
        self = this;
        self.doStuff();
    },

    doStuff: function() {
        //stuff here
    }

}

这很有效,但是如果我有一些对象,它会覆盖var“self”...显然它是一个全局变量..我不能在这个对象中使用受限制的单词“var”..

我如何解决这个问题,或为每个对象创建一个NameSpace?

谢谢!

3 个答案:

答案 0 :(得分:6)

您可以创建一个隐藏变量的函数范围:

var foo = (function() {
  var self = null
  return {
    init: ...,
    doStuff: ...
  };
})();

虽然不清楚self应该在这里做什么,以及如何使用foo

答案 1 :(得分:0)

您必须使用this

init: function() {
  this.self = this;
  this.self.doStuff();
},

编辑但是,它仍然是" foo"的财产。对象,并且它并不是非常清楚你在哪里获得" foo"从。换句话说,编写代码的方式只有一个对象。

或者,您可以使用闭包创建对象:

var foo = function() {
    var self = null;

    return {
      init: function() {
        self = this;
        self.doStuff();
      },

      doStuff: function() {
        //stuff here
      }
    };
}();

答案 2 :(得分:0)

您甚至没有使用您创建的属性。而是创建另一个具有相同名称的全局变量。使用this关键字访问属性:

var foo = {

  self: null,

  init: function() {
    this.self = this;
    this.self.doStuff();
  },

  doStuff: function() {
    //stuff here
  }

}

(虽然在属性中保存this确实毫无意义......)

如果您想在对象中使用局部变量,请为其创建一个闭包:

var foo = (function(){

  var self = null;

  return {

    init: function() {
      self = this;
      self.doStuff();
    },

    doStuff: function() {
      //stuff here
    }
  };

}());