改变javascript函数内部this指针指向的三种方法
2010-04-23 00:00
1061 查看
在查了大量的资料后,我总结了下面的三条规则,这三条规则,已经可以解决目前我所遇到的所有问题.
规则0:函数本身是一个特殊类型,大多数时候,可以认为是一个变量。
都可以认为是创建了一个变量,这个变量的值就是一个函数。
规则1:如果一个函数,是某个对象的key 值,那么,this就指向这个对象。
这个规则很好理解:
函数就是一个变量,但是可以绑定到某个对象的下面,并且 this 就会指向 o 对象。
这里必须要注意,没有被绑定的对象,默认this 指向window 对象。
举几个例子:
还必须注意的是,绑定没有传递性,比如上面的嵌套的函数,a绑定到 o 对象,那么就影响了a函数,
而b 还是指向到window。
规则2:如果函数new 了一下,那么就会创建一个对象,并且this 指向 新创建的对象。
var o = new a();
这个时候,o 不再是个函数,而实际上,可以认为是这样的一个过程。
创建一个对象 var o = {};
然后,把this 指向 o,通过this 把 o 给初始化了。
规则3:通过apply 可以改变this 的指向
这个apply 的绑定就更加的灵活了,实际上,apply的功能和下面的功能差不多。
简单的,可以a.apply(obj, [obj]); // true
javascript 的this 可以简单的认为是 后期绑定,没有地方绑定的时候,默认绑定window。
综合实例:
jquery 里面有一个很常用的函数 each,可以把循环的对象元素绑定到this,方便操作。
这里只是简单的做个演示:
代码
可以看到我头部导航的链接都变成红色了。
规则0:函数本身是一个特殊类型,大多数时候,可以认为是一个变量。
function a() { alert(this); } 或者 var a = function() { alert(this); }
都可以认为是创建了一个变量,这个变量的值就是一个函数。
规则1:如果一个函数,是某个对象的key 值,那么,this就指向这个对象。
这个规则很好理解:
var a = function(obj) { alert(this == obj); } var o = {}; o.afun = a; o.afun(o); //true
函数就是一个变量,但是可以绑定到某个对象的下面,并且 this 就会指向 o 对象。
这里必须要注意,没有被绑定的对象,默认this 指向window 对象。
举几个例子:
function a() { //this == window } function a() { //this == window function b() { //this == window } }
还必须注意的是,绑定没有传递性,比如上面的嵌套的函数,a绑定到 o 对象,那么就影响了a函数,
而b 还是指向到window。
规则2:如果函数new 了一下,那么就会创建一个对象,并且this 指向 新创建的对象。
var o = new a();
这个时候,o 不再是个函数,而实际上,可以认为是这样的一个过程。
创建一个对象 var o = {};
然后,把this 指向 o,通过this 把 o 给初始化了。
规则3:通过apply 可以改变this 的指向
这个apply 的绑定就更加的灵活了,实际上,apply的功能和下面的功能差不多。
var a = function (obj) { alert(this == obj); }; obj.fun = a; obj.fun(obj);//true
简单的,可以a.apply(obj, [obj]); // true
javascript 的this 可以简单的认为是 后期绑定,没有地方绑定的时候,默认绑定window。
综合实例:
jquery 里面有一个很常用的函数 each,可以把循环的对象元素绑定到this,方便操作。
这里只是简单的做个演示:
代码
function each(tagName, callback) { var lists = document.getElementsByTagName(tagName); for (var i = 0; i < lists.length; i++) { callback.apply(lists[i]); } } each("a", function () { this.style.color = "red"; } );
可以看到我头部导航的链接都变成红色了。
相关文章推荐
- 改变javascript函数内部this指针指向的三种方法
- 改变javascript函数内部this指针指向的三种方法
- 改变javascript函数内部this指针指向的三种方法
- 改变 javascript 函数 内部 this 指针 指向 的三种方法
- Javascript中改变this指针的指向的三种方法
- 改变函数内部的this指针的指向
- 改变this指向的三种常用方法
- js事件处理程序的运行环境(改变attachEvent内部的this指向&封装兼容性的 addEvent方法)
- js的this指针指向谁,以及相关的call、apply、bind方法
- 指针参数在函数中不能改变指针指向的原因和解决方法
- js绑定事件this指向发生改变的问题解决方法
- JS中改变this指向的方法(call和apply、bind)
- JavaScript中call,apply,bind方法的总结(改变this指向)
- JavaScript的回调函数内部this的指向问题以及四种绑定this指向的方法
- JAVA中This指针的三种常用方法
- js中this的改变指向的方法:call和apply、bind
- 交换两个数的值的三种指针方法——指针的引用和指向指针的指针
- js小练习:利用getElementsByTagName方法、for循环、this指针、数组实现对多个相同元素value值的改变
- js中的this指向和改变this指向的方法
- 从this指向开始谈谈JavaScript函数的一些内部实现