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)你可以自己试试哈

浙公网安备 33010602011771号