Javascript之原型(二) - Zhouqin的博客

#Javascript之原型(二)
许多oo语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。如前所示,由于函数没有签名,在ECMAScript中无法实现接口继承。而ECMAScript中只支持实现继承,而且实现继承主要是依靠原型链来实现的。

###原型链

以上定义了两个类型:SuperType和SubType。每个类型分别有一个属性和方法。
SubType继承了SuperType,而继承是通过创建SuperType的实例,并将该实例赋给SubTyoe.prototype实现的。实现的本质是重写原型对象,代之以一个新类型的实例。换句话说,原来存在于SuperType的实例中的所有属性和方法,现在也存在于SubType.prototype中了。
我们给SubType.prototype添加了一个方法,这样就在继承了SuperType的属性的和方法的基础上又添加了一个新方法。
这个例子的实例以及构造函数和原型之间的关系如图所示

在上面的代码中,我们没有使用SubType默认提供的原型,而是给它换了一个新原型;这个新原型就是SuperType的实例。于是新原型内部有一个指针,指向了SuperType的原型。

最终结果是这样的:instance指向SubType的原型,而SubType的原型又指向SuperType的原型。getSuperValue()方法仍然还在SuperType.prototype中,但property则位于SubType.prototype中。只是因为property是一个实例属性,而getSuperValue()则是一个原型方法。
要注意instance.constructor现在指向的是SuperType,这是因为原来的SubType.prototype中的constructor被重写了的 缘故。

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

###给原型添加方法一定要放到替换原型的语句之后

####1

####2不能通过对象字面量创建原型方法

;

###原型链的问题

上面这个例子通过SuperType构造函数定义了一个colors属性。SubType的所有实例都会共享这一个colors属性。
原型链第二个问题是,在创建子类型的实例时,不能向超类型的构造函数传递参数。

###借用构造函数

###传递参数

###组合继承
组合继承,指的是将原型链和借用构造函数的技术组合到一块,从而发挥二者之长的模式。原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,即通过原型定义方法实现了函数复用,又能保证每个实例都有自己的属性。

###原型式继承

###寄生式继承
寄生式继承是与原型式继承紧密相关的一种思路。寄生式继承的思路与寄生构造函数和工厂模式类似,即创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再真像真的是它
做了所有工作一样的返回对象。

###寄生组合式继承



原文:大专栏  Javascript之原型(二) - Zhouqin的博客

原文地址:https://www.cnblogs.com/peterchan1/p/11633185.html

时间: 2024-08-28 00:40:33

Javascript之原型(二) - Zhouqin的博客的相关文章

Html5开发——html+css基础二(个人博客一)

今天没有写完,而且写的还有点问题,所以今天就先不上传代码了(ps:快写完了才发现布局有问题,导致代码太多,感觉写的不是很好,所以今天先分析一下布局) 第一步先写一个大的div用来放ABC三个部分,这个大的div居中! 第二步分别写ABC三个部分,ABC三个部分分别使用浮动(float)来定位.A和B都各使用了一张非常小的图片,通过重复(repeat)属性生成A和B 第三步C部分分别写好3~16这几个模块,在通过组合利用浮动定位.分组如下: E:3 F:4.7.10.13 G:5.8.11.14

PHP二次开发博客换服务器了

有没有发现PHP二次开发博客这几天打开速度快了?经过一年多的辗转反侧,在美国空间摸打滚爬了这么久,终于理解了,还是放国内比较舒服.目前用的是一个云服务器,基本配置如图所示: 其实对服务器的维护也不是很了解,大致根据自己的经验做了一下测试.本地ping的速度如下: 利用站长工具的超级ping,相应速度如下: 使用hdparm命令测试磁盘的读取速度如下: 测试磁盘的IO写速度如下 测试IO同时读和写的速度如下: 整体来说,还可以吧.而且价格也比较可观,不用再考虑每年都续费了,这个直接是购买的70年,

第十二次ScrumMeeting博客

第十二次ScrumMeeting博客 本次会议于11月30日(四)22时整在3公寓725房间召开,持续35分钟. 与会人员:刘畅.辛德泰.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容和链接): 队员 今日完成任务 明日任务计划 刘畅 完善接口设计 张安澜 发帖功能和回帖功能 实现余下博文部分后端接口 辛德泰 帖子界面 帖子界面衔接 方科栋 学习审核和举报相关实现 赵奕 根据爬取到的数据更新数据库 2. 工作中遇到的困难 一切顺利,暂无困难. 3. 燃尽图 4. 每日例会的照片

在Python中用Request库模拟登录(二):博客园(简单加密,无验证码)

源代码分析 博客园的登录页面非常简单,查看网页源代码,可以发现两个输入框的id分别为input1.input2,复选框的id为remember_me,登录按钮的id为signin. 还有一段JavaScript代码,下面来简单分析一下. 先来看$(function(){});函数: 1 $(function () { 2 $('#signin').bind('click', function () { 3 signin_go(); 4 }).val('登 录'); 5 }); $(functio

作业二:个人博客作业内容:需求分析

怎样与用户有效沟通获取用户的真实需求? 访谈,正式访谈系统分析员将提出一些事先准备好的具体问题:非正式访谈中,分析人员将提出一些用户可以自由回答的开放性问题,一鼓励被访问人员说出自己的想法.需求分析的目的就是获取用户的需求,面对面的访谈可以更好更直接的了解用户的需求. 2.3 性能需求分析 1.数据的准确性:准确率要足够高以保证系统能够正确的运行. 2.灵活性:软件系统的设计应采用灵活的结构,能够快速地实现用户所提出的新的需求. 3.可理解性:对于本软件提供的各种命令,各种信息提示,应易于用户理

Javascript函数的简单学习 - <转> 博客园

Javascript函数的简单学习 函数的定义与调用1:函数的定义    语法格式    function 函数名(数据类型 参数1){//function是定义函数的关键字        方法体;//statements,用于实现函数功能的语句        [返回值return expression]//expression可选参数,用于返回函数值            }    //1:函数名:区分大小写,并且在同一个页面中,函数名是唯一的    //2:parameter:可选参数,用于

补交 作业二:个人博客作业内容:需求分析

怎样与用户有效沟通获取用户的真实需求? 往往需求的获取是由对用户的访谈开始的.然而访谈得到的需求往往会由于交谈双方的理解侧重点.观念不同等各种情况导致得到的需求并不是十分贴近用户的需求.我认为,对于难以得到用户的真实需求的主要原因在于我们的主观判断性.由于人们往往都是站在自己的角度看待事物,这样就容易导致双方很容易发生分歧.要想得到用户的需求,访谈人员必须要站在用户的角度去与用户进行交谈,同时,在与用户交谈前,先要了解用户可能使用到的专业领域的专有名词,防止在交谈过程中用户的意思,导致双方所交谈

jquery学习入门到高级(转载博客园)

原文地址:http://www.cnblogs.com/zhangziqiu/archive/2009/04/30/jQuery-Learn-1.html 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 从零开始学习jQuery (五) 事件与事件对象 从零开始学习jQuery (六) jQuery中的Ajax 从零开

个人博客自定义样式

0 前言 从大二开始写博客,主要为了记录自己学习过程中的问题.尝试使用过CSDN.博客园等公共服务,也用Github pages搭建过自己的博客,但效果都不令人满意.CSDN广告太多,界面乌烟瘴气,而且很多博客内容都是抄袭而来:博客园模板比较单一,而且对Markdown的支持不友好:Github pages很自由,但是搭建以及发布文章比较麻烦. 后来在网上浏览别人的博客园时,才发现原来是可以自己定制博客的,遂写此文. 1 皮肤 皮肤也就是博客的背景,博客园提供了一些模板,可以在管理->设置->