位置: 编程技术 - 正文

javascript 面向对象全新理练之原型继承(javascript面向对象编程指南第三版)

编辑:rootadmin
首先创建一个父类的实例化对象,然后将该对象赋给子类的 prototype 属性。 这样,父类中的所有公有实例成员都会被子类继承。并且用 instanceof 运算符判断时,子类的实例化对象既属于子类,也属于父类。 然后将子类本身赋值给它的 prototype 的 constructor 属性。(注意:这里赋值的时候是没有 () 的!) 这一步是为了保证在查看子类的实例化对象的 constructor 属性时,看到的是子类的定义,而不是其父类的定义。 接下来,通过对 o.method1() 调用的结果我们会看到,子类继承来的公有实例方法中,如果调用了私有实例字段或者私有实例方法,则所调用的这些私有实例成员是属于父类的。 同样,通过对 o.method2() 调用的结果我们看到,子类中定义的实例方法,如果调用了私有实例字段或者私有实例方法,则所调用的这些私有实例成员是属于子类的。 通过对 o.method() 调用的结果我们看到,定义在父类原型上的方法,会被子类继承。 通过对 o.method3() 调用的结果我们看到,子类中定义的实例方法是不能访问父类中定义的私有实例成员的。 最后,通过对 subClass.staticMethod() 调用的结果我们看到,静态成员是不会被继承的。 2.4 调用继承法 调用继承的本质是,在子类的构造器中,让父类的构造器方法在子类的执行上下文上执行,父类构造器方法上所有通过 this 方式操作的内容实际上都都是操作的子类的实例化对象上的内容。因此,这种做法仅仅为了减少重复代码的编写。 上面这个例子很好的反映出了如何利用调用继承法来实现继承。 利用调用继承的关键只有一步操作: 就是在子类定义时,通过父类的 call 方法,将子类的 this 指针传入。使父类方法在子类上下文中执行。 这样,父类中的所有在父类内部通过 this 方式定义的公有实例成员都会被子类继承。 用 instanceof 运算符判断时,子类的实例化对象只属于子类,不属于父类。 查看子类的实例化对象的 constructor 属性时,看到的是子类的定义,不是其父类的定义。 接下来,通过对 o.method1() 和 o.method2() 调用的结果跟原型继承法的调用结果是相同的,所说明的问题也是一样的,这里不再重复。 通过对 o.method() 调用的结果我们看到,定义在父类原型上的方法,不会被子类继承。 通过对 o.method3() 调用的结果我们看到,子类中定义的实例方法同样不能访问父类中定义的私有实例成员的。 最后,通过对 subClass.staticMethod() 调用的结果我们看到,静态成员同样不会被继承的。 最后,还有一点,在这个例子中没有体现出来,就是通过调用继承法,可以实现多继承。也就是说,一个子类可以从多个父类中继承通过 this 方式定义在父类内部的所有公有实例成员。 作为一种弱类型语言,javascript 提供了丰富的多态性,javascript 的多态性是其它强类型面向对象语言所不能比的。 多态 重载和覆盖 先来说明一下重载和覆盖的区别。重载的英文是 overload,覆盖的英文是 override。发现网上大多数人把 override 当成了重载,这个是不对的。重载和覆盖是有区别的。 重载的意思是,同一个名字的函数(注意这里包括函数)或方法可以有多个实现,他们依靠参数的类型和(或)参数的个数来区分识别。 而覆盖的意思是,子类中可以定义与父类中同名,并且参数类型和个数也相同的方法,这些方法的定义后,在子类的实例化对象中,父类中继承的这些同名方法将被隐藏。 重载 javascript 中函数的参数是没有类型的,并且参数个数也是任意的,例如,尽管你可以定义一个: 这样的函数,但是你仍然可以再调用它是带入任意多个参数,当然,参数类型也是任意的。至于是否出错,那是这个函数中所执行的内容来决定的,javascript 并不根据你指定的参数个数和参数类型来判断你调用的是哪个函数。 因此,要定义重载方法,就不能像强类型语言中那样做了。但是你仍然可以实现重载。就是通过函数的 arguments 属性。例如: 这样你就实现了任意多个参数加法函数的重载了。 当然,你还可以在函数中通过 instanceof 或者 constructor 来判断每个参数的类型,来决定后面执行什么操作,实现更为复杂的函数或方法重载。总之,javascript 的重载,是在函数中由用户自己通过操作 arguments 这个属性来实现的。 覆盖 实现覆盖也很容易,例如: 这样,子类中定义的 method 就覆盖了从父类中继承来的 method 方法了。 你可能会说,这样子覆盖是不错,但 java 中,覆盖的方法里面可以调用被覆盖的方法(父类的方法),在这里怎么实现呢?也很容易,而且比 java 中还要灵活,java 中限制,你只能在覆盖被覆盖方法的方法中才能使用 super 来调用次被覆盖的方法。我们不但可以实现这点,而且还可以让子类中所有的方法中都可以调用父类中被覆盖的方法。看下面的例子: 你会发现,原来这么简单,只要在定义覆盖方法前,定义一个私有变量,然后把父类中定义的将要被覆盖的方法赋给它,然后我们就可以在后面继续调用它了,而且这个是这个方法是私有的,对于子类的对象是不可见的。这样跟其它高级语言实现的覆盖就一致了。 最后需要注意,我们在覆盖方法中调用这个方法时,需要用 call 方法来改变执行上下文为 this(虽然在这个例子中没有必要),如果直接调用这个方法,执行上下文就会变成全局对象了。

推荐整理分享javascript 面向对象全新理练之原型继承(javascript面向对象编程指南第三版),希望有所帮助,仅作参考,欢迎阅读内容。

javascript 面向对象全新理练之原型继承(javascript面向对象编程指南第三版)

文章相关热门搜索词:javascript面向对象编程指南,javascript面向对象编程,javascript面向对象编程指南第三版,javascript面向对象编程指南 pdf,javascript面向对象编程,javascript面向对象精要pdf,javascript面向对象吗,javascript面向对象编程指南,内容如对您有帮助,希望把文章链接给更多的朋友!

javascript 面向对象的经典实例代码 [Ctrl+A全选注:如需引入外部Js需刷新才能执行]JavaScript面向对象编程

JavaScript 常见对象类创建代码与优缺点分析 在Javascript中构建一个类有好几种方法:1.Factory方式functioncreateCar(){varcar=newObject();car.color=b;car.length=1;car.run=function(){alert(run);}returncar;}定义这么一个函数之

javascript 混合的构造函数和原型方式,动态原型方式 我们日常JS编程中最常用的方式有下面2种:1.混合的构造函数和原型方式(重点)functioncar(sColor,iNumbers){//构造函数只用来定义对象的所有非函数属性,

标签: javascript面向对象编程指南第三版

本文链接地址:https://www.jiuchutong.com/biancheng/386514.html 转载请保留说明!

上一篇:javascript 面向对象全新理练之继承与多态(javascript面向对象编程指南)

下一篇:javascript 面向对象的经典实例代码(javascript面向对象编程指南)

  • 建筑劳务公司怎么做账
  • 转让财产损失是指什么
  • 增值税电子普通发票怎么作废
  • 购买不良资产交印花税吗
  • 个体户购买社保和自由人购买社保区别
  • 劳务派遣 税务
  • 咨询服务费要交税吗
  • 去年多做销售费用今年冲回该如何做会计分录?
  • 募集资金怎么算
  • 固定资产丢失收入怎么办
  • 红冲增值税专用发票需要收回原发票吗
  • 金三打印客户端插件如何下载?
  • 企业在年度中间终止经营活动的,应当
  • 材料费用定额是什么意思
  • 盘亏固定资产会计处理
  • 固定资产验收单图片
  • 应纳税所得额要减所得税费用吗
  • 小规模纳税人0税率
  • 跨月退款会计分录
  • 押金收不回来了怎么处理
  • 取得劳务费的账务处理
  • 资产总额和净资本的关系
  • 在win7中,当前窗口的数量是多少个
  • 周转房维修请示
  • 财政补贴会计入养老金一起发放吗
  • 消防费用怎么做分录
  • 收到对方公司开出发票如何做账
  • 新公司成立前期费用
  • fsmb32.exe是什么进程 作用是什么 fsmb32进程查询
  • 麦克米伦anki
  • 一般纳税人什么情况下可以开3%的税率
  • 其他应收款和其他应付款常常被用作抵消
  • yolov5最新版
  • canvas软件教程
  • cvpr2020目标跟踪
  • php程序技术
  • 优秀员工奖励现金是工资还是福利
  • 购置固定资产支付的现金属于投资活动产生的现金流量吗
  • 汇划款项与资金清算核算内容包括哪些
  • 季度报税有利润必须要报交所得税吗
  • 母公司的资质怎样才能转给子公司
  • 税务清单打印不全
  • sqlserver修改值
  • 年末需暂估已发生的费用吗
  • 银行支付利率的含义是什么
  • 支付税务罚款计入什么科目
  • 房产税的纳税义务人是征税范围内房屋产权所有人
  • 企业没有工会的需要计提嘛
  • 企业未开票收入怎么入账
  • 其他人挂靠公司交社保会计处理怎么做?
  • 免税小规模企业增值税申报表怎么填
  • 接待客户的旅游活动
  • 补发以前年度工资的账务处理
  • 暂估入库可以隔几个月再冲回吗
  • 发票隔年还能做账吗
  • 本年收益属于什么科目
  • 年数总和法和双倍余额递减法的公式
  • centos rpm安装方法
  • Linux/Mac MySQL忘记密码命令行修改密码的方法
  • mysql和c
  • Windows Server 2008网络中禁止迅雷下载
  • 硬盘安装fedora35
  • u盘装win8系统教程图解
  • Linux操作系统软链接和硬链接的联系与区别
  • 怎么用win7兼容模式运行
  • win10商店没有图标
  • extjs3 combobox取value和text案例详解
  • 在github开源的项目有假的吗
  • javascript的数组可以存放任何类型
  • 超出div的部分隐藏
  • jq获取url
  • nodejs入门教程
  • axios使用jsonp
  • 举例讲解生产可能性曲线
  • 什么叫开源库
  • 江苏税务怎么登陆
  • 国家税务总局千户集团企业名单
  • 黄金消费税如何缴纳
  • 企业所得税年报怎么填
  • 富士康走了,京东去哪了
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设