如何在对象集合中访问实例的'this'

时间:2018-03-29 09:39:41

标签: javascript this javascript-objects

我用构造函数创建了一个对象。然后我将它的'this'值存储到变量中。

使用'new'创建几个对象后,我将它们推送到一个数组。当我再次访问对象时,所有对象的'this'值都成为最后创建的对象。

var t = function(x){
    j = this;
    this.u = x;
    this.k = function (){
        return j.u;
    }
}

var g = [];
for(var i = 0; i < 10; i++)
    g.push(new t(i));
for(var i = 0; i < 10; i++)
    console.log(g[i].k());

打印十个'9'而不是0到9。

如何在函数内访问当前实例的'this'。并访问当前对象的详细信息。

3 个答案:

答案 0 :(得分:2)

原因j是全局变量。做:

  let j = this;

然后是它关闭的部分。

答案 1 :(得分:2)

使用var本地化j的范围

var j = this;

<强>演示

&#13;
&#13;
var t = function(x) {
  var j = this;
  this.u = x;
  this.k = function() {
    return j.u;
  }
}

var g = [];
for (var i = 0; i < 10; i++)
  g.push(new t(i));
for (var i = 0; i < 10; i++)
  console.log(g[i].k());
&#13;
&#13;
&#13;

否则,由于j的范围未本地化为t,因此在您调用9时会返回其最后一个值k()

答案 2 :(得分:1)

如前所述,您需要使用varlet个关键字,否则j变量将受限于全局范围。

var j = this;

要添加的另一件事是,为了防止出现这种错误,您可以指定:

'use strict' 

在您的文件顶部,它会通过您的方式抛出错误来通知您这个错误。使用严格模式可以防止意外地将变量绑定到全局范围。