定义
call:
用法:obj.myFun.call(db,‘北京’, … )。
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
apply
用法:obj.myFun.apply(db,[‘北京’, … ])。
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
call()、apply()都是用来重定义 this 这个对象的。
基本用法
<script>
function Person() {
this.name = 'Jack';
this.age = 18;
this.showName = function () {
console.log(this.name + " " + this.age);
}
}
function person2(){
this.name = 'Bill';
this.age = 16;
}
let P1 = new Person();
let P2 = new person2();
P1.showName(); //输出: Jack 18
P1.showName.call(P2); //输出: Bill 16
P1.showName.apply(P2); //输出: Bill 16
</script>
带参数用法:
<script>
function Person() {
this.name = 'Jack';
this.age = 18;
this.showName = function (x) {
console.log(this.name + " " + this.age + ' '+ x);
}
}
function person2(){
this.name = 'Bill';
this.age = 16;
}
let P1 = new Person();
let P2 = new person2();
P1.showName.call(P2,100); // 输出: Bill 16 100
P1.showName.apply(P2,[200]);// 输出: Bill 16 200
</script>
继承用法:
<script>
function Person(name, age) {
this.name = name;
this.age = age;
this.showName = function () {
console.log(this.name + " " + this.age);
}
}
function person2(name, age) {
Person.call(this, name, age); // 或者 Person.apply(this,[name,age]);
}
let P2 = new person2('Bill', 16);
P2.showName(); //输出:Bill 16
//通过call或apply方法,将原本属于Person对象的showName()方法交给对象person1、person2来使用。
</script>
call() 与 apply() 区别:
相同之处
call() 与 apply() 的第一个参数都是 this 的指向对象:
不同之处:
- call() 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面。
- apply() 的参数都必须放在一个数组里面传进去