版权声明:欢迎阅读,有误请指正,转载请申明。 https://blog.csdn.net/wx1995sss/article/details/87256897
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
/*this对象
1.没有明确附属对象的函数中指向全局(window对象)
2.函数对象方法中指向函数附属的对象
3.构造函数中,指向的是构造函数的实例
*/
//this在一般的函数指向全局
function test(){
this.x = 1;
console.log(this.x);//1
console.log(this);//window
}
test();
function a(){
var user = "abc";
console.log(this.user);//undefined,this指向全局,useri是局部变量
console.log(this);//window
}
a();
//this在构造函数中(this指向的是构造函数的实例)
var x = 2;
function Fun(){
this.x = 1;//this指向o,也就是构造函数的实例
}
var o =new Fun();
console.log(o.x);//1
//this在对象方法中(指向函数所附属的对象)
function myFun(){
console.log(this.x);//1
}
var obj = {};
obj.x = 1;
obj.m = myFun;
obj.m();
//改变this指向,call(),apply(),bind()
// call()定义:调用一个对象的一个方法,以另一个对象指向替换当前对象指向。
// apply()定义:应用某一对象的一个方法,用另一个对象指向替换当前对象指向。
var a=b=3;
var num = {a:10,b:3};
var objd ={a:20,b:10};
var str ={a:30,b:20};
function sum(c,d){
return this.a+this.b+c+d
}
console.log(sum(3,4));//13
console.log(sum.call(num,3,4));//20
console.log(sum.apply(objd,[3,4]));
var fun = sum.bind(str,3,4);
console.log(fun());
</script>
</head>
<body>
</body>
</html>