最近,我开始学习Javascript,同时做了一些实验,测试了这些代码中的代码:
var k = {
ab: "hi",
func: function() {
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + this.ab)
}())
}
};
k.func();这段代码为我提供了"inner1 hi“和"inner2未定义”的结果。
我不明白为什么它的undefined在第二console.log
发布于 2015-07-28 06:57:32
var k = {
ab: "hi",
func: function() {
console.log(this,"inner1" + this.ab);
(function() {
console.log(this,"inner2 " + this.ab)
}())
}
};
k.func();执行匿名函数会更改实例,以持久化上下文:
var k = {
ab: "hi",
func: function() {
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + this.ab)
}.bind(this).call())
}
};
k.func();发布于 2015-07-28 07:10:09
@minitech和@Issac很好地解释了这个问题和解决方案。另一种在任何级别获取属性的方法是by object。在您的代码中是:
var k = {
ab: "hi",
func: function() {
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + k.ab)
}())
}
};
k.func();发布于 2015-07-28 06:57:46
在第二个函数中使用this没有任何参考。相反,您可以使用:
(function() {
console.log("inner2 " + this.ab)
}.call(this))https://stackoverflow.com/questions/31669243
复制相似问题