我用构造函数创建了一个对象。然后我将它的'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'。并访问当前对象的详细信息。
答案 0 :(得分:2)
原因j
是全局变量。做:
let j = this;
然后是它关闭的部分。
答案 1 :(得分:2)
使用var
本地化j的范围
var j = this;
<强>演示强>
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;
否则,由于j
的范围未本地化为t
,因此在您调用9
时会返回其最后一个值k()
。
答案 2 :(得分:1)
如前所述,您需要使用var
或let
个关键字,否则j
变量将受限于全局范围。
var j = this;
要添加的另一件事是,为了防止出现这种错误,您可以指定:
'use strict'
在您的文件顶部,它会通过您的方式抛出错误来通知您这个错误。使用严格模式可以防止意外地将变量绑定到全局范围。