javascript---对象继承方式

  1. 对于初学这来说,掌握对象的继承方式是必修课,今天就在这里给大家总结下对象的几种继承方式。
  2. 在学习对象的继承方式之前,需要了解什么是原型及原型链的概念,不知道的话先去恶补下吧。
  3. js并不是一门面向对象的语言,没有类class的概念,在js中使用构造方法代替类class,实现模拟面向的对象编程方式。

第一种方式-----原型链继承

原型链继承:子构造方法的原型指向父构造方法的实例。

                        //声明父级构造函数
			function Parent(name){
				this.name = name;
			}
			//添加父级构造方法的原型属性
			Parent.prototype.age = 18;
			//实例化父级对象
			var p = new Parent("小明");
			//声明子级构造函数
			function Son(){}
			//将子级的构造函数的原型指向父级的实例
			Son.prototype = p;
			//创建子级的实例对象
			var s = new Son();
			//测试
			console.log(s.name)//小明
			console.log(s.age)//18

缺点:父级在实例化过程中必须传入参数,这样子级得到的属性值是确定的,得到的结果如不是自己想要的,还要手动更改。

第二种继承方式:借用构造函数

                        //声明父级构造函数
			function Parent(name){
				this.name = name;
			}
			//声明子级构造函数
			function Son(name){
				Parent.call(this,name)
			}
			//创建子级的实例对象
			var s = new Son("小明");
			//测试
			console.log(s.name)//小明

优点:这种方式可以根据需求传入值,以得到不同的属性值

缺点:因为只是借用了父级的构造方法,给实例对象添加属性。并不能继承父级原型中的属性。

第三种方式:圣杯模式--结合原型链和借用构造函数

将需要传入参数,初始化的对象属性,通过借用构造方法继承.不需要初始化的属性,放在父构造函数的原型中,通过原型链继承.

   //声明父级构造函数
			function Parent(name){
				this.name = name;
			}
//添加父级构造方法的原型属性
			Parent.prototype.age = 18;
//实例化父级对象----不传入参数
			var p = new Parent();
//声明子级构造函数
			function Son(name){
				//借用父级构造函数
				Parent.call(this,name);
			}
//将子级的构造函数的原型指向父级的实例
			Son.prototype = p;
//创建子级的实例对象
			var s = new Son("小明");
			//测试
			console.log(s.name)//小明
			console.log(s.age)//18

完美实现初始化实例属性,继承所有数据。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章