this简单化,与call()方法的作用

在谈及this的时候,很多js编程者脑子都很混乱,因为在一般的js使用者的手中,使用到this的几率着实不多,在事件中,this一般指向事件触发者,addEventListener和attachEvent除外(关于事件绑定和委托请看我另外一个相关的博客)

实际上this始终指向对象,而这个对象则是方法的调用者;

比如:

1 function f1(){
2     console.log(this);
3 }
4 f1();//object window

实际上f1函数写在那里不是加个括号就自己调用了的,f1函数本质上是属于window对象的方法,也就是说f1()等同于window.f1();

那么这个this的指向是window就没有问题了

也就是说在正常情况下,this一直指向调用该函数的对象;

那么call()方法的作用是干什么的呢?

1 function f2(a) {
2         console.log(a);
3         console.log(this);
4 }
5 var obj = {};
6 f2.call(obj,2)//结果 2 和 {}
7 obj.f2(1);//报错 obj.f2 is not a function

通过上面的代码可以得知call()方法的作用是可以改变f2()调用的时候方法里面的this的指向,call()的第一个参数就是指向的对象,但是这并不意味着obj具有了f2()方法,

当我们使用obj对象调用时,发现报错,obj并没有这么个方法,所以call()的作用改变this的指向,也就是说改变调用方法的对象,不能改变方法拥有者本身,

而call()的第二个参数向后都是方法本身的参数;

形象点必须就是,我的东西让你使用,但是东西还是我的,不过用的人是你; 

因此得出来的结论是,在js中,this总指向调用方法的对象,但是指向是可以通过调用call()方法来改变的,却不能改变方法的拥有者;

 

另外一个就是apply()方法和call()类似只不过他有2个参数,第二个参数是一个数组来存放参数;

  

posted @ 2017-09-06 20:32  燃烧的草莓  阅读(176)  评论(0)    收藏  举报