面试题: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

posted @ 2017-10-08 10:23  hefeng6500  阅读(167)  评论(0编辑  收藏  举报