首页 > 代码库 > js原型链与继承

js原型链与继承

先看看JAVA中继承的定义 :Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。

所以继承需要实现的是:能够拥有父类的方法和属性,也能自己定义新的方法和属性;

那么直接用原型链会有什么问题?

//定义一个CarModel类function CarModel(c){      this.color=c||"白色";      this.getColor=function(){	        console.log(‘我的颜色是‘+this.color);      }}//car类有自己的属性,比如品牌function Car(brand){	 this.brand=brand;     this.getBrand=function(){	      console.log(‘我的品牌是‘+this.brand);      }}//car类需要继承自carmodel,汽车共有的属性color放在carmodel上Car.prototype=new CarModel();var car1=new Car("丰田");console.log(car1);

技术分享

以上就是直接利用原型链来继承的效果;现在的话颜色是默认的白色,如果子类要定义自己的颜色怎么做?

car1.color="蓝色";

 技术分享

存在的问题:如果原型上有引用类型的数据,子类实例改变这些引用类型的数据的话会影响其他所有的子类实例(关于引用数据类型和基本数据类型参考:这个文章);当你操作基本类型时相当于操作一个副本,当操作引用类型时改变的就是他的原始值了;

验证这个问题:

1.原型上添加引用类型数据:数组

技术分享

2.改变值

技术分享

确实影响了原型对象

然后:操作基本数据类型的时候是不会影响原型的(比如你操作car1.color)你可以自己试试哈

 

js原型链与继承