JS中的this
㈠This是什么?
⑴解析器(浏览器)在调用函数时,每次都会向函数内部传递进一个隐含的参数
这个隐含的参数就是this,this指向的是一个对象
这个对象我们称为函数执行的 上下文对象
⑵根据函数的调用方式的不同,this会指向不同的对象
1.以函数的形式调用时,this永远都是window
2.以方法的形式调用时,this就是调用方法的那个对象
⑶具体示例1:打印this
function fun(){
console.log(this);
}
fun();
//创建一个对象
var obj = {
name:"孙悟空",
sayName:fun
};
var obj2 = {
name:"沙和尚",
sayName:fun
};
//console.log(obj.sayName == fun);
①obj.sayName();
②obj2.sayName();
效果如下:
以obj调用,结果:
以obj2调用,结果:
⑷具体示例2:打印this.name
function fun(){
console.log(this.name);
}
fun();
//创建一个对象
var obj = {
name:"孙悟空",
sayName:fun
};
var obj2 = {
name:"沙和尚",
sayName:fun
};
//console.log(obj.sayName == fun);
①obj.sayName();
②obj2.sayName();
以obj调用,结果:
以obj2调用,结果:
结论:this不是固定不变的,调用方式不同,对象就不同
⑸结合上面例子具体分析:
var name = "全局的name属性";
//obj.sayName();
//以函数形式调用,this是window
fun();
结果:
//以方法的形式调用,this是调用方法的对象
obj.sayName();
结果:
obj2.sayName();
结果:
㈡This实例
this根据调用者的不同,变成不同的值,让我们的程序变得更加的灵活
//创建一个name变量
var name = "全局";
//创建一个fun()函数
function fun(){
console.log(this.name);
}
//创建两个对象
var obj = {
name:"孙悟空",
sayName:fun
};
var obj2 = {
name:"沙和尚",
sayName:fun
};
//我们希望调用obj.sayName()时可以输出obj的名字
obj.sayName();
结果:
obj2.sayName();
结果:
㈢This的三种情况
1.当以函数的形式调用时,this是window
2.当以方法的形式调用时,谁调用方法this就是谁
3.当以构造函数的形式调用时,this就是新创建的那个对象