2

如何在文字对象中声明私有 var?因为我有这个代码:

var foo = {

    self: null,

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

    doStuff: function() {
        //stuff here
    }

}

这完美地工作,但如果我有一些对象,var“self”它将覆盖..显然它是一个全局变量..我不能在这个对象内使用受限词“var”..

我该如何解决这个问题,或者为每个对象创建一个命名空间?

谢谢!

4

3 回答 3

6

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

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

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

于 2011-12-06T15:35:15.023 回答
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
      }
    };
}();
于 2011-12-06T15:35:00.217 回答
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
    }
  };

}());
于 2011-12-06T15:37:23.307 回答