函数也是一个对象:fun才是对象
1、在函数对象中有一个call()和apply()方法---需要通过函数对象调用
function fun() {
console.log('我是fun函数');
}
fun();
fun.apply();
fun.call();
2、 当调用call()和apply()方法,都会调用函数执行。
3、在调用call()和apply()方法时候可以将一个对象指定为第一个参数:
//以函数调用this指向window
function fun() {
console.log(this);//以函数调用this指向window
}
fun();
4、在调用call()和apply()方法时候可以将一个对象指定为第一个参数 :此时这个对象将会成为函数执行时候的参数
function fun() {
console.log(this);//以函数调用this指向window
}
//fun();
obj={};//对象
fun.apply(obj);
fun.call(obj);
5、 this由call(对象)和apply(对象)---指定
function fun() {
console.log(this);//以函数调用this指向window
}
//fun();
obj={name:'李四'};//对象
fun.apply(obj);
fun.call(obj);
6、对象里面的函数this 指定
obj = {
name: '李四',
sayName: function(){
console.log(this.name);
} //对象里面的方法指向obj
}; //对象
obj.sayName();//李四
此时使用apply()方法 更改this内容——参数是谁this是谁
obj = {
name: '李四',
sayName: function(){
console.log(this.name);
} //对象里面的方法指向obj
}; //对象
obj1={name:'张三'};
obj.sayName.call(obj1);//张三
obj.sayName.apply(obj1);
7、call()方法可以将实参在对象之后依次传递:
obj1={name:'张三'};
function fun(a,b){
console.log('a='+a);
console.log('b='+b);
console.log(this);
} //函数里面的this指向window
fun();
fun.call(obj1,2,3);
8、apply方法需要将实参封装到一个数组中传递
obj1={name:'张三'};
function fun(a,b){
console.log('a='+a);
console.log('b='+b);
console.log(this);
} //函数里面的this指向window
fun();
fun.apply(obj1,[2,3]);
注意:this
1、以函数形式调用,this是window
2、以方法调用,this是调用方法的对象
3、以构造函数调用,this是新创建的那个对象
4、使用call和apply调用,this是指定的那个对象