首页 > Web开发 > 详细

js原型链与继承

时间:2017-04-16 14:26:46      阅读:341      评论:0      收藏:0      [点我收藏+]

先看看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原型链与继承

原文:http://www.cnblogs.com/llauser/p/6718470.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!