我有一个基本的基本问题。我执行以下代码。
var app = {
x: 10,
start: function() {
window.setTimeout(this.callback.bind(this), 10);
},
callback: function() {
function print() {
console.log('p '+ this.x);
}
console.log('c '+ this.x);
print();
}
};
app.start();
您可以在jsbin
上执行此代码我希望它输出c 10
和p 10
。而是输出c 10
和p undefined
。在进一步检查时,this
内的print()
似乎指向window
对象。为什么会发生这种情况?
答案 0 :(得分:0)
因为当您调用print
时,您没有使用任何上下文,因此打印内的this
是指窗口对象。
您可以使用print
之类的
.call()
var app = {
x: 10,
start: function() {
window.setTimeout(this.callback.bind(this), 10);
},
callback: function() {
function print() {
snippet.log('p ' + this.x);
}
snippet.log('c ' + this.x);
print.call(this);
}
};
app.start();

<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
答案 1 :(得分:0)
答案 2 :(得分:-2)
您需要使用bind
到print()
功能,以使其有效。
function print() {
console.log('p '+ this.x);
}.bind(this)
因为没有它,每个函数都有自己的this
对象链接到窗口。