关于call()的this指向研究

以前看过一些文档,一直以为自己懂了,今天一看其实懂的还是比较模凌两可。先说一些代码吧

fun.call(obj)

var a = {
	message: 'aa'
}
var b = function () {
	console.log(this.message)
}
b.call(a);   //aa,这个很简单

obj.call(obj)

var a = {
	say: function () {
		console.log(this.message)
	}
}
var b = {
	message: 'bb'
}
a.say.call(b)  //bb,这个也很简单

fun.call(fun)

function a () {
	this.message = "aa";
}
function b () {
	this.message = "bb";
	this.say = function () {
		console.log(this.message)
		console.log(this)
	}
}
var c = new a();

b.call(a)  //bb
a.say();  //函数a,这个结果和console.log(a)相同
b.call(c);  //bb
c.say();   //对象a,但是内容是b函数的,这个结果和console.log(c)相同

//console  
bb;
function a() {
	this.message = "aa";
};
bb;
a {
	message: "bb", 
	say: function()
};

我不知道你们有没有看懂这个输出,反正我一开始完全懵比。

当浏览器执行b.call(a)这一步的时候,a.say()的this指向指向b。

当浏览器执行b.call(c)这一步的时候,相当于执行了

this.message = "bb";
this.say = function () {
       console.log(this.message)
       console.log(this)
}

 说着说着,我又晕了。

反正当fun.call(fun)的时候,this指向前面那个fun。

当后面的fun为构造函数的时候,加入a.call(b),b为构造函数的时候,b会拥有a的方法,如果有重合的,则a的覆盖b的。

但是如果b不是构造函数的时候,b自身不会拥有a的方法,但是可以调用a的方法。

 

不过说句实话,在平常使用call和apply的时候,fun.call(fun)的例子也忒少了,基本都是使用obj.call(obj)。今天主要是被fun.call(fun)这个东西搞了。头都晕了。

如果有大神知道这其中的原理,就好好的帮我们解答一下啊!!谢谢了0.0

转载于:https://www.cnblogs.com/yhspehy/p/6689989.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值