一直以为this指向最靠近的对象,最近开始写一些插件,查看前人所写的文章,发现有些并不是那么回事:
一:函数调用,this指向全局对象window;
function run(){
console.log(this);
}
run(); //window
二:作为对象的方法调用,this指向调用的对象;
var a={
‘name‘:‘RL‘,
‘draw‘:function(){
console.log(this===a); //对象的方法调用,this指向调用的对象a;
function write(){
console.log(this===window); //这个是直接函数调用,this并不是指向对象a,指向全局对象window;
}
write();
}
}
a.draw() //true true
三:new 构造函数;
function Run(){
console.log(this); // Run{}
}
var p=new Run();
console.log(p);// Run{}
this指向的是新建对象;
四:apply() call()
//这两个的功能一样的,都是将函数绑定到另外一个对象上去运行;调用一个对象的方法,以另一个对象替换当前对象;只不过传递的参数不一样;
function run(val1,val2){
var a=8;
console.log(this.a+val1+val2);
}
var p={
a:1
}
run.call(p,1,2) // 4
run.apply(p[1,2]) // 4
如有不对的地方,请多多指教! ——RLflash
原文:http://www.cnblogs.com/RLflash/p/6637565.html