在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。
在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。在JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以使用标准的基于类的继承,也可以使用更微妙一些的原型式继承。在JS中应该要明确一点,一切继承都是通过prototype来进行的,且JS是基于对象来继承的。(这话是比较官方的说法,看着都很专业)
在说继承之前,首先得先回答一个问题,什么是继承?
我理解的继承,简单来说就是,
–1.在原有类的基础上,进行可操作的修改,得到一个崭新的类,这个类有原来类的功能,同时也有自己的功能;
–2.这个新的类,不会影响原有类的功能,不会相互干预;
这里肯定有人要问了,什么是‘可操作的修改呢?’说白了就是在不影响整个类的功能的前提下,进行的修改!这点和第二点略有重复,仔细想想,还是有所区别的!!!
下面开始说说常用的集中继承方式:
###1.代码:
简单的解释一下上面的代码:首先写了一个很简单的构造函数,在函数的原型上分别添加了showName和showSex的方法;紧接着写了一个work()函数,这里注意work()里面的参数,多了一个job参数,这个参数就是要继承的参数, Person.call(this, name, sex);有人问这里的this指的是啥?看下图:
答案就是 new出来的work对象!
work.prototype = Person.prototype;这句话就是通过prototype继承父级的属性,name和sex;然后就是在work的基础上添加showJob方法;
最后就是new一个work对象,执行方法!最后work继承了Person的name和sex属性;是不是很好懂!
###2.代码:
简单解释一下:
这里只是用不同方法,通过原型链来继承父级的方法,原理是一样的!
call与apply的区别
js中call和apply都可以实现继承,唯一的一点参数不同,func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])。
说简单一点,这两函数的作用其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。
如有错误请私信本人!
访客的ip和所在地址: 访问时间: 当前时间: