obj.call(thisObj,arg1, arg2, ...);
obj.apply(thisObj,[arg1, arg2, ...]);
call 和 apply的工作方式基本相同,唯一的不同之处在于参数的传递形式。都是改变this指向。借用别人的方法来实现自己的需要的功能
function test(name,age){
this.name = name;
this.age = age
}
//其实test() 执行等于 test.call();
var obj = {};
//现在想要借助test函数给obj添加一个name和age
test.call(obj,'a',20);//第一个参数是this的指向,后面的参数是函数需要的形参
/*
当调用call时,test函数里面会把this的指向换成obj,就是这样
function test(name,age){
//var this = obj;
this.name = name;//等于obj.name = name
this.age = age;//等于obj.age = age
}
所以当函数执行完后,obj就不在是空值了
此时obj={
name:"a",
age:20
}
这就是借用别人的方法来实现自己需要的功能
*/
现在有两个函数,第二个函数的功能包含了第一个函数的功能
function people(name,age){
this.name = name;
this.age = (function(){
age++;
return age;
}());
console.log('name:'+this.name);
}
function students(name,age,height,tel){
this.name = name;
this.age = age;
this.height= height;
this.tel= tel
}
//那么现在students方法完全可以实现people方法的功能,students可以这么写
function students(name,age,height,tel){
people.call(this,name,age);
this.height= height;
this.tel= tel;
console.log("age:"+this.age)
}
students('a',20,180,1231313123);//会打印出name:a age:21