关于this指向
构造函数创建对象: new Object()
字面量创建对象:{}
1》如果产生了函数中还有一个函数(闭包).内部函数中的this指向于window
改变this指针(指向)
1>赋值
var userName ="张三"; //window对象添加了一个userName属性值为 ==》张三
var obj = {
userName:"李四",
run:function(){
var That = this; //this==>obj
return function(){
return That.userName; // this===>window 返回的结果就是张三 。。。返回李四???
};
}
}
alert( obj.run()() );
2>call 、 apply()
//改变指针
var userName = "张三";
var obj = {
userName:"李四",
run:function(){
return this.userName;//this===> obj;
}
}
//alert(obj.run()); //这里弹出了李四
//让obj中的run里面的this改变this指向 , 指向于window
alert( obj.run.call(window) );
var userName = "张三";
var obj = {
userName:"李四",
run:function(){
//this===>obj
return function(){
//this===>window
return this.userName;
}
}
}
alert( obj.run()() );
alert( obj.run().call(obj) ); //让obj.run return的这个函数中的this不再指向于window了, obj*/
alert( obj.run().apply(obj) );
//复制
function parent(num1,num2){
return num1+num2;
}
function calls(a,b){
return parent.call(window,a,b);
}
function applys(a,b){
return parent.apply(window,[a,b]);
}
alert( calls(8,8) );
alert( applys(8,8) );