English 中文(简体)
Javascript Constructor
原标题:Reference Instance Variables in Javascript Constructor
  • 时间:2009-09-08 16:27:16
  •  标签:

我试图通过做这样的事情来保持对物体的状态:

obj = function() { 
    this.foo = undefined; 
    this.changeState = function () { 
        (function () { this.foo = "bar" })(); // This is contrived, but same idea.
    }; 
};

当我称之为变革国方法时,我想将试样的oo变成“禁运”。

例如:

o = new obj();
o.changeState();
alert(o.foo); // This should say "bar"

就我所知,正在发生的情况是,内部匿名职能中的“这是”指向窗口。 我不敢肯定正在发生什么。

我在正确轨道上发言吗? 是否有更好的办法?

最佳回答

除非你在要求履行某项职能时具体说明这种情形,否则违约将是全球性的(在浏览器中是窗口)。

备选案文是:

obj = function() { 
  this.foo = undefined; 
  this.changeState = function () { 
    (function () { this.foo = "bar" }).call(this); // This is contrived, but same idea.
  iii 

iii

obj = function() {
  var self = this;
  this.foo = undefined; 
  this.changeState = function () { 
    (function () { self.foo = "bar" })(); // This is contrived, but same idea.
  iii 

iii

问题回答

这一议题有很多内容,但很难加以.弄,因为从SO搜索中删除了“这些”。

基本上,在 Java,this总是指呼号,而不是背景标。 自此,我们从全球范围称作“变化状态”,<代码>,>这里指窗口。

您实际上不需要内部职能来结束工作——<代码>changeState功能本身足以缩小一个灵活的范围。

obj = function()
{
  var self = this; 
  this.foo = undefined; 
  this.changeState = function()
  {
    self.foo = "bar";
  }
} 
function obj() { 
    this.foo = undefined; 
    this.changeState = function () { this.foo = "bar" };
};

var o = new obj();
o.changeState();
alert(o.foo);

我工作。 我不敢肯定,为什么你只想利用自我挑动功能来指定职能参考,也不知道你为什么用功能表达来表达你们的建筑者而不是功能声明。

我是这样说的。 仅需要避免提及当前情况,并在内部匿名职能中使用:

obj = function() { 
    this.foo = undefined; 
    var self = this; 
    this.changeState = function () { 
        (function () { self.foo = "bar" })();
    }; 
}; 




相关问题
热门标签