this对象
我们刚接触this的时候;觉得this的指向一种;当时觉得被它弄到头大;
所以今天就聊聊this的指向。
解析器在调用函数每次都会向函数内部传递一个隐含的参数
这个隐含的参数就是this,this指向的是一个对象,
这个对象我们称为函数执行的上下文对象,
根据函数调用方式不同,this会指向不同的对象
总结this
this : 默认指向 window 对 象
1.以函数的形式调用时,this永远都是window
2.以方法的形式调用是,this就是调用方法的那个对象
3.当以构造函数的形式调用时,this就是新创建的对象
4.使用call与apply改变this的指向,
call()方法可以将实参在对象之后依次传递
fun1.call(obj,12,34);
apply() 方法需要将实参封装到一个数组中统一传递
fun1.apply(obj,[12,34]);
代码解析:
<script>
/*
1.以函数的形式调用时,this永远都是window
2.以方法的形式调用是,this就是调用方法的那个对象
*/
function fun(a,b){//形参
console.log("a="+a+", b="+b);
// console.log(this);
}
fun(12,34);//实参
function sayHello(){
console.log(this);
}
sayHello();
var obj={
name:"zhangsan",
sayWord:sayHello
};
obj.sayWord();//函数以方法的形式被调用时,this指向的是调用方法的对象
/*
call()与apply()
- 这两个方法都是函数对象的方法,需要通过函数对象来调用
- 当对函数调用call()和apply()都会去调用函数执行
- 在调用call()与apply()可以将一个对象指定为第一个参数
此时这个对象将会成为函数执行时的this
- call()方法可以将实参在对象之后依次传递
- apply() 方法需要将实参封装到一个数组中统一传递
*/
function fun(){
// console.log("这是一个函数");
console.log(this);
}
var obj={
name:"xiaoming",
age:23
};
function fun1(a,b){
console.log("a="+a+",b="+b);
console.log(this);
}
fun1(12,34);
fun1.call(obj,12,34);
fun1.apply(obj,[12,34]);
</script>