call和apply其实相当于继承,
如,以下两个函数,
1.不传输参数使用
首先是 父类 函数
function Father(){
this.name = ‘sll’;
this.money = ‘10000’;
this.sayName = (){
return this.name;
}
}
接着是子类函数
function Children(name,money){
console.log(name); //输出 'qiupan'
console.log(money); //输出undefined,没有传入该值
Father.call(this); //开始调用父类
console.log(name); //输出 'sll',调用了父类的值
console.log(money); //输出10000,调用了父类的值
this.name = name;
}
var children = new Children(‘qiupan’);
children.sayName(); //输出 ‘qiupan’,此函数为父类当中的函数,但我们在这之前已经为this.name赋予了新的值,即将子类当中的name的值,传到父类当中的this.sayName = (){
return this.name;
}函数表达式当中,所以打印出的值为便成为了子类中的值,
注: 一定要注意父类的调用顺序哦,上诉这个例子就是因为执行的顺序不同才会产生这些结果
2.传输参数使用
//父类 Person
function Person(name,age){
this.name = name; //接收子类当中的name的值
this.age = age; //接收子类当中的age的值
console.log(name); //并输出 sll
console.log(age); //并输出 21
}
//子类 Student
function Student(name = ‘sll’,age=‘21’){
Person.call(this,name,age); 调用父类,将参数值传给分类
}
var student = new Student();
3.就下来就是apply的使用方法,
apply的使用方法和call使用差不多,唯一的区别就是,当apply需要传输参数给父类需要使用数组来进行传输,因为在不传输参数是时,apply和call的使用方法是一样的,所以就不再讲解,接下来讲解一下有参数的情况
function Person(name,sex,money) {
this.name =name;
this.money = money;
this.sex = sex;
console.log(‘Person的值’+this.name); //输出沈伦莉
console.log(‘Person的值’+this.money); //输出676787
// console.log(‘Person的值’+this.sex); //输出男
}
//子类 Chinese
function Chinese(name,sex,money) {
//借助 call 实现继承
Person.apply(this,[name,sex,money]);
}
var chinese = new Chinese(‘沈伦莉’,‘男’,‘676787’);
以上就是关于call和apply基本用法的讲解,