下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

web前端:JS继承——原型链

作者:用脑袋行走的人     来源: https://www.cnblogs.com/planetwithpig/p/11543320.html点击数:737发布时间: 2020-03-04 19:44:29

标签: Javascript原型链java

Web开发

  Javascript最初受java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自Self和Scheme。JavaScript与Java名称上的近似,是当时网景为了营销考虑与Sun公司达成协议的结果。许多OO语言支持两种继承:接口继承和实现继承。ECMAScript只支持实现继承,且继承实现主要依赖原型链实现。

  原型链

  基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法。

  构造函数、原型和实例的关系:每个构造函数均有一个原型对象,原型对象均包含一个指向构造函数的指针,实例均包含一个指向原型对象的内部指针。若让原型对象等于另一个类型的实例,此时原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含一个指向另一个构造函数的指针。若另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。

  原型链基本模式,示例编程代码如下:

  <!DOCTYPEhtml>

  <html>

  <head>

  <title>原型链-继承</title>

  <scripttype="text/javascript">

  functionSupertype(){

  this.property=true;//propertype属于Supertype实例属性

  }

  Supertype.prototype.getSuperValue=function(){//getSuperValue()属于原型方法

  returnthis.property;

  };//至此,Supertype原型包含指向Supertype构造函数的constructor属性和getSuperValue()方法。

  functionSubtype(){

  this.subproperty=false;//subproperty属于Subtype实例属性

  }

  //继承了Supertype,重写了原型对象

  Subtype.prototype=newSupertype();

  //添加新方法

  Subtype.prototype.getSubValue=function(){//为Subtype原型添加方法getSubValue()

  returnthis.subproperty;

  }//至此,Subtype原型模型中包含属性和方法为:内部属性[prototype]、property属性、getSuperValue()方法。作为一个Supertype类型的实例,其内部属性[prototype]指向Supertype原型,实例属性property。

  //重写超类中的方法,因此需要谨慎地定义方法

  Subtype.prototype.getSuperValue=function(){

  returnfalse;

  }

  varinstance=newSubtype();//实例内部属性[prototype]指向Subtype原型;且包含实例属性subproperty

  alert(instance.getSuperValue());//在重写超类函数之前返回true;重写了超累函数之后返回false

  //确定原型和实例的关系

  alert(instanceinstanceofObject);//true

  alert(instanceinstanceofSupertype);//true

  alert(instanceinstanceofSubtype);//true

  alert(Object.prototype.isPrototypeOf(instance));//true

  alert(Supertype.prototype.isPrototypeOf(instance));//true

  alert(Subtype.prototype.isPrototypeOf(instance));//true

  </script>

  </head>

  <body>

  </body>

  </html>

  原型链的问题:

  (1)原型链子类实例共享父类引用类型,同原型模型的问题一样。

  (2)在创建子类的实例时,不能在不影响所有对象实例的情况下,向超类型的构造函数传递参数

  因此,实践中很少单独使用原型链。

  文章内容部分摘自《JavaScript高级程序设计(第3版)》

  JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

赞(13)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程