轻松设置“this”变量?

2022-08-30 04:04:22

我对Javascript有很好的理解,除了我无法找到一种设置“this”变量的好方法。考虑:

var myFunction = function(){
    alert(this.foo_variable);
}

var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts

var old_fn = someObj.fn;   //store old value
someObj.fn = myFunction;   //bind to someObj so "this" keyword works
someObj.fn();              
someObj.fn = old_fn;       //restore old value

有没有办法在没有最后4行的情况下做到这一点?这很烦人...我尝试过绑定一个匿名函数,我认为它很漂亮,很聪明,但无济于事:

var myFunction = function(){
    alert(this.foo_variable);
}

var someObj = document.body;        //using body as example object
someObj.foo_variable = "hi";        //set foo_variable so it alerts
someObj.(function(){ fn(); })();    //fail.

显然,将变量传递到 myFunction 是一种选择...但这不是这个问题的重点。

谢谢。


答案 1

JavaScript 中的所有函数都定义了两个方法,call()apply()。函数语法如下所示:

call( /* object */, /* arguments... */ );
apply(/* object */, /* arguments[] */);

这些函数的作用是调用它们的函数,将 object 参数的值分配给此函数

var myFunction = function(){
    alert(this.foo_variable);
}
myFunction.call( document.body );

答案 2

我想你正在寻找电话

myFunction.call(obj, arg1, arg2, ...);

这将调用,设置为 。myFunctionthisobj

还有稍微不同的方法应用,它将函数参数作为数组:

myFunction.apply(obj, [arg1, arg2, ...]);