js:this

来源:互联网 发布:大数据走势 找规律 编辑:程序博客网 时间:2024/06/02 02:59

这里写图片描述
这是一道面试题。
加上前些天看了几篇文章,有篇文章讲得不错,拿出来说说。
传送门:http://mp.weixin.qq.com/s/ksqtCd8ouxU-cVc_HnA4Aw


函数调用

函数调用的三种方式

func(a, b);obj.method(a, b);func.call(context, a, b);

似乎前两种我们更加频繁地使用,而第三种则不常用到。
但其实,第三种才是函数调用的真正关键所在。也就是说,可以用第三种的写法来替代前两种。
如何替代呢?

func(a, b);//等价于func.call(undefined, a, b);obj.method(a, b);//等价于obj.method.call(obj, a, b);

现在来看一段代码

var obj = {  foo: function(){    console.log(this)  }}var bar = obj.fooobj.foo() // 打印出的 this 是 objbar() // 打印出的 this 是 window

原因就在于

bar()//等价于bar.call(undefined);obj.foo()//等价于obj.foo.call(obj, a, b);

this丢失问题

var bar = obj.foo

你明明想的是this指向的是obj,但是他却指向了window。
这就是this丢失问题。
如何解决?

var bar = obj.foo.bind(obj);
0 0
原创粉丝点击