面试题:this指针的指向,以及call、apply应用

	var a = 2;
	function test(){
		var a = 4;
		console.log(this.a);
		this.a = 1;
	}
	test();//2
	//这里为什么是2?因为调用test()函数的是window,上述test()可以写成window.test(),test()内部的this指向的是window,而window中的a=2,所以console.log(this.a)打印出的是2
	
	var h = new test();//undefined 声明一个变量h,new一个构造函数用h接住,那么test()的指针this指向的就是h,输出的this.a自然就是undefined
	console.log(h.a);//1  上述表达式是创建了一个构造函数,打印了this.a是undefined,注意:接着人家说:this.a=1,那么是的h这个对象的a=1,所有console.log(h.a)输出1咯
	
	
	var k = {a:1000};
	k.m = test; //将test(函数)变量赋值给k的m
	k.m();//1000 ,这里this指的就是k,所有输出的就是1000咯,注意后面this.a=1,改变了k对象中的a,从原来的1000变成了this.a=1;
	
	k.m.apply();//1 上述所说的this.a=1指的就是k.a=1,apply(),括号内未写this指向谁那么默认指向调用该函数的对象,所以,this指向调用该函数的对象m(m是k对象的一个函数),这个函数里面的this指向的还是k
	
	k.m.call(k);//1 this指向k,k.a=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值