Javascript:如何轻松设置“this”variables?

我有一个相当不错的Javascript的理解,除了我不能找出一个很好的方式来设置“这个”variables。 考虑:

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. 

显然,将variables传递给myFunction是一个选项…但这不是这个问题的要点。

谢谢。

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

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

这些函数做的是调用它们被调用的函数,将对象参数的值赋值给

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

我想你正在寻找call

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

这将调用myFunction设置为obj

还有一些略有不同的方法apply ,它将函数参数作为数组使用:

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

如果您想this值“存储”到某个函数中,以便以后可以无缝地调用该函数(例如,当您无法再访问该值时),则可以bindbind (不适用于所有浏览器):

 var bound = func.bind(someThisValue); // ... later on, where someThisValue is not available anymore bound(); // will call with someThisValue as 'this' 

我的search如何绑定this把我带到这里,所以我张贴我的发现:在'ECMAScript 2015',我们也可以使用箭头函数来设置这个词法。

请参阅: https : //developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

代替:

 function Person() { setInterval(function growUp() { // The callback refers to the `self` variable of which // the value is the expected object. this.age++; }.bind(this), 1000); } 

我们现在可以做到:

 function Person(){ this.age = 0; setInterval(() => { this.age++; // |this| properly refers to the person object }, 1000); } var p = new Person(); 
Interesting Posts