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
值“存储”到某个函数中,以便以后可以无缝地调用该函数(例如,当您无法再访问该值时),则可以bind
其bind
(不适用于所有浏览器):
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();