我在读一篇文章。它与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));

07-26 00:14