上一节我们大致了解了重写方法是什么概念,但是不要着急,你还需要知道如何用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函数快速复制,比如你想修好你的电脑,你很多时候并不需要辛辛苦苦学习电脑到底怎么运行,你只需要去买新的配件把坏的换下来就可以了,call和apply函数就提供了这种便利。
2.为了代码好看,并且层次更加清晰
call函数和apply函数区别在于传入实参的方式不同,call是一个一个传入,apply是以数组形式传入,apply函数在传入大量实参时比call函数