原型链各种继承方式

*原型链继承:
1.定义父类型构造函数
2.给父类型的原型添加方法
3.定义子类型的构造函数
4.创建父类型的对象赋值给子类型的原型
5.将子类型原型的构造属性设置为子类型
6.给子类型原型添加方法
7.创建子类型的对象: 可以调用父类型的方法
*关键:
1.子类型的原型为父类型的一个实例对象

            function Super(){
    
    
				this.SuperPro = "SuperPro";
			}
			Super.prototype.showSuper = function(){
    
    
				console.log(this.SuperPro);
			}
			function Sub(){
    
    
				this.SubPro = "SubPro";
			}
			Sub.prototype.showSub = function(){
    
    
				console.log(this.SubPro);
			}
			//让子类型的原型成为父类型的原型的属性
		    	Sub.prototype = new Super();
		    //让子类型的原型的constructor指向子类型,不实现此举,则Sub的构造函数是Super()
		       Sub.constructor = Sub;
			var son = new Sub();
			   son.showSuper();   //SuperPro
			var senior = new Super();
			   senior.showSuper();  //SuperPro

//借用构造函数继承(假的,并没有继承,简化了代码罢了)
*定义父类型构造函数
*定义子类型构造函数
*在子类型构造函数中调用super()调用父类型构造函数

           function Person(name , age){
    
    
 				this.name = name ;
				this.age = age; 
			}
			function Student(name , age , price){
    
    
				Person.call (this,name,age);   
				//相当于: this.Person(name,age);
				// this.name = name ;
				// this.age = age ;
				this.price = price;
			}
			  var s = new Student("Vodka",20,10000);
			  console.log(s.age,s.name ,s.price);  //20,Vodka 10000

// 原型链+借用构造函数的组合继承
// *利用原型链实现对父类型对象的方法继承
// *利用super()借用父类型构建函数初始化相同属性

            function Person(name ,age ){
    
    
				this.name = name ;
				this.age = age ;
			}
			function Student(name , age , price){
    
    
				Person.call(this,name,age);  //使子类成为父类构造函数的调用对象,给子类添加属性
				this.price = price;
			}
			//使子类的原型对象成为父类的一个实例对象,这样子类就可以访问父类原型对象中的属性和方法
			    Student.prototype = new Person();
		    //修正Student的构造函数的指向,让它指向Student,而不是Person
			    Student.prototype.constructor = Student;
			Person.prototype.setName = function(name){
    
    
				this.name = name ;
			}
			Student.prototype.setPrice = function(price){
    
    
				this.price = price ;
			}
			var s  = new Student("James",98,999); //James 98 999
			console.log(s.name,s.age,s.price);  //name和age所属对象是Person,price的所属对象属于Student
			s.setName("Vodka");  //该方法所属对象是Person.prototype
			s.setPrice(8989);  //该方法所属对象是Function.prototype
			console.log(s.name,s.age,s.price); //Vodka 98 8989

猜你喜欢

转载自blog.csdn.net/Vodka688/article/details/113748045
今日推荐