JS继承的实现

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

当然你也可以将上述方法混合使用,也是没有问题的。

猜你喜欢

转载自blog.csdn.net/qq_41709082/article/details/84402628
今日推荐