上一节我们大致了解了重写方法是什么概念,但是不要着急,你还需要知道如何用call函数和apply函数来减少你敲代码的工作量,以及不同场合需要使用哪些不同的重写模式。
5.1 call和apply
JavaScript中有一些函数是全局函数,是所有对象都可以调用的,其中call和apply就是这样的函数,它们一般在函数体中调用,可以很方便地完成方法复制。其调用方法如下:
//定义一个person1类,这个类有sayName方法可以输出它的name
person1={name:"孙悟空"}
p1=new person1;
person1.sayName = function () {
alert(this.name);
}
p1.satName(); //输出“孙悟空”
//定义另外一个类person2
person2={name:"猪八戒"}
p2=new person2;
person2.sayName = function () {
person1.sayName.call(this); //将person1的方法在person2的方法中调用。
}
p2.sayName() //输出“猪八戒"
可以看到,call函数就是复制方法,但是和单纯的复制又不一样,它可以将this指针转为当前函数体的this指针,原本在person1中this指针指向孙悟空,在person2中this指针就指向猪八戒。
稍微想一下就知道,这个函数和复制原函数函数体到新函数中实现功能是一样的,那为什么需要这种函数呢?
1.很多底层代码你很难找到它们放在哪,当是你只要知道它们的功能是什么,就可以用call函数快速复制