当前位置:  开发笔记 > 编程语言 > 正文

轻松设置"this"变量?

如何解决《轻松设置"this"变量?》经验,为你挑选了3个好方法。

我对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> ForYourOwnGo..:

为JavaScript中的所有函数定义了两种方法call(),和apply().函数语法如下:

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

这些函数的作用是调用它们被调用的函数,并将object参数的值赋给.

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


另外,如果你正在使用jQuery,你可以使用`$ .proxy(function,element)`,这样无论何时调用该函数,它都将在元素的上下文中.http://api.jquery.com/jquery.proxy/

2> sth..:

我想你正在寻找call:

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

这就要求myFunctionthis设置为obj.

还有一个稍微不同的方法apply,它将函数参数作为数组:

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



3> pimvdb..:

如果你想将this值"存储" 到一个函数中,以便以后可以无缝地调用它(例如,当你再也无法访问该值时),你可以使用bind它(不是在所有浏览器中都可用):

var bound = func.bind(someThisValue);

// ... later on, where someThisValue is not available anymore

bound(); // will call with someThisValue as 'this'


FYI`bind`显然可用于IE9 +,FF4 +,Safari 5.1.4+和Chrome 7+ [(源)](http://kangax.github.io/es5-compat-table/#Function.prototype.bind) .你也可以直接在匿名函数上调用bind:`var myFunction = function(){/*this = something*/} .bind(something);`
推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有