this是JS中的很常用的一个属性,它在调用时有四种情况:
1、以函数形式调用时,this永远都是window。
function fun(){
console.log(this)
}
fun();
//输出为:"[object Window]"
2、以方法的形式调用时,this是调用方法的对象。
function fun(){
console.log(this)
}
var obj = {
sayName:fun
}
obj.sayName();
fun();
//输出为:
//"[object Object]"
//"[object Window]"
//可以看到,调用的方法和调用的函数指向的是同一个函数,但是调用方法输出的已经变成的Object
3、以构造函数的形式调用时,this是新创建的那个对象。
var name = "全局";
function fun(){
console.log(this.name);
}
var obj = {
name : "OBJ1",
sayName : fun
}
var obj2 = {
name : "OBJ2",
sayName : fun
}
var obj3 = {
name : "OBJ3",
sayName : fun
}
obj2.sayName();
//输出为:"OBJ2"
//可以看到,调用那个对象,this就会成为那个对象
4、使用call()和apply()方法调用时,this是指定的那个对象。
var name = "全局";
function fun(){
console.log(this.name)
}
var obj = {name:"OBJ"}
var obj2 = {name:"OBJ2"}
fun.call(obj2);
fun.apply(obj);
fun();
//输出分别是:
//"OBJ2"
//"OBJ"
//"全局"
//可以看到,参数是谁、输出的就是谁。
网友评论