我在读一篇文章。它与javascript有关。这里是本文的代码示例。请看下面。
function customobject(){
this.value = 2;
}
customobject.prototype.inc = function(){
this.value++;
}
function changer(func){
func();
}
var o = new customobject();
alert(o.value);
o.inc();
alert(o.value);
changer(o.inc);
alert(o.value);
我的问题是,为什么在调用changer(o.inc)时“ o.value”的值没有变化?
最佳答案
o.inc
只是对匿名函数的引用:
function() {
this.value++;
}
而
this
是函数执行的范围。因此,当您运行changer(o.inc)
时,this
实际上是指向全局的,在浏览器中是window
。它不一定与o
有任何关系。您可以像这样绑定范围:
function changer(func, scope){
func.call(scope); // or apply
}
changer(o.inc, o);
或者简单地:
function changer(func){
func();
}
changer(o.inc.bind(o));