JS继承的实现
1.常用的实现继承的方法有:
- 通过call方法改变父构造函数内的this指向,来实现继承。
- 通过apply方法改变父构造函数内的this指向,来实现继承。
- 通过prototype原型来实现继承。
2.方法1:利用call实现继承 代码如下:
/*父函数*/
function Person(name,age){
this.name=name;
this.age=age;
this.say=function(){
console.log('我叫:'+this.name+'年龄:'+this.age);
}
}
/*子函数*/
function Son(name,age){
Person.call(this,name,age);
this.title="我是子构造函数";
}
let son=new Son('张三',18);
console.log(son.say()); //我叫:张三 年龄:18
通过call方法将Person(父函数)内的this改为指向Son(子函数),此时Person(父函数)内设置的属性均属于为Son函数,从而实现了继承。
3.方法2:利用apply方法实现继承 代码如下:
/*父函数*/
function Person(name,age){
this.name=name;
this.age=age;
this.say=function(){
console.log('我叫:'+this.name+'年龄:'+this.age);
}
}
/*子函数*/
function Son(name,age){
Person.apply(this,[name,age]);
this.title='我子构造函数';
}
let son=new Son('李四',19);
console.log(son.say());//我叫:李四 年龄:19
原理与方法一样,与方法一不同的是apply方法第二个参数是一个数组,数组包含了需要传入父函数内参数,而call方法则是一个一个传。
3.方法3:通过prototype原型实现继承 代码如下:
/*父函数*/
function Person(){
}
Person.prototype.name="王五";
Person.prototype.age=20;
Person.prototype.say=function(){
console.log(this.name,this.age);
}
/*子函数*/
Son.prototype=new Person();
function Son(name,age){
this.name=name;
this.age=age;
}
let son=new Son('小明',20);
console.log(son.say());//小明 20
如果没有为son传入name,age那么son将继承Person的name和age
当然你也可以将上述方法混合使用,也是没有问题的。