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