欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js—深入原型之三继承

程序员文章站 2022-05-08 16:50:13
...

1、通过改变原型指向来实现继承:

缺陷:实现继承的同时直接初始化了属性,继承过来的属性的都是一样的

解决:继承的时候不用改变原型的指向,直接使用借用构造函数(call方法)

              function Person(name,age,sex,weight){
			this.name=name;
			this.age=age;
			this.sex=sex;
			this.weight=weight;
		}
		Person.prototype.sayHi=function(){
			console.log('你好啊啊啊');
		}
		//借用构造函数:call(实例对象,属性,属性.....)
		function Student(name,age,sex,weight,score){
			Person.call(this,name,age,sex,weight);
			this.score=score;
		}
		
		var stu1=new Student('小明',20,'女',87);
		console.log(stu1.name+'  ||  '+stu1.age+'  ||  '+stu1.sex+'  ||  '+stu1.weight);
		var stu2=new Student('小成',21,'男',90);
		console.log(stu2.name+'  ||  '+stu2.age+'  ||  '+stu2.sex+'  ||  '+stu2.weight);
		var stu3=new Student('小张',19,'男',98);
		console.log(stu3.name+'  ||  '+stu3.age+'  ||  '+stu3.sex+'  ||  '+stu3.weight);
		stu3.sayHi();

结果:

js—深入原型之三继承(方法无法继承)

2、组合继承:改变原型的指向(解决方法的继承,实例化不用传参)+借用构造函数(解决属性的复用继承)

               function Person(name,age,sex,weight){
			this.name=name;
			this.age=age;
			this.sex=sex;
			this.weight=weight;
		}
		Person.prototype.sayHi=function(){
			console.log('你好啊啊啊');
		}
		//借用构造函数:call(实例对象,属性,属性.....)
		function Student(name,age,sex,weight,score){
			Person.call(this,name,age,sex,weight);
			this.score=score;
		}
		//不用传参
		Student.prototype=new Person();
		//自定义的方法
		Student.prototype.school=function(){
			console.log('我是大学生');
		}
		var stu1=new Student('小明',20,'女',87);
		console.log(stu1.name+'  ||  '+stu1.age+'  ||  '+stu1.sex+'  ||  '+stu1.weight);
		var stu2=new Student('小成',21,'男',90);
		console.log(stu2.name+'  ||  '+stu2.age+'  ||  '+stu2.sex+'  ||  '+stu2.weight);
		var stu3=new Student('小张',19,'男',98);
		console.log(stu3.name+'  ||  '+stu3.age+'  ||  '+stu3.sex+'  ||  '+stu3.weight);
		//继承的方法
		stu3.sayHi();
		//自己的方法
		stu3.school();

结果:

小明  ||  20  ||  女  ||  87
小成  ||  21  ||  男  ||  90
小张  ||  19  ||  男  ||  98
你好啊啊啊
我是大学生

3、拷贝继承:把一个对象中的属性或者方法直接复制到另一个对象中

    js—深入原型之三继承另建立一个空间

js—深入原型之三继承

4、数组中函数调用

                 var  arr=[
		    function (){
		    	console.log('first blood');
		    },
		    function (){
		    	console.log('double kill');
		    },
		    function (){
		    	console.log('trible kill');
		    },
		    function (){
		    	console.log('quatary kill');
		    },
		    function (){
		    	console.log('penta  kill');
		    },
		    function (){
		    	console.log('legendary');
		    }
		];
		arr.forEach(function(ele){
			ele();
		});


相关标签: 原型