位置: 编程技术 - 正文

javascript类继承机制的原理分析(js 类继承)

编辑:rootadmin
目前 javascript的实现继承方式并不是通过“extend”关键字来实现的,而是通过 constructor function和prototype属性来实现继承。首先我们创建一个animal 类 js 代码 构造函数与其他普通函数区别在于,1.构造函数里有 this关键字,2.调用构造函数是使用的new关键字。通过new运算符调用构造函数 animal 后,系统就会返回一个对象,这个对象就相当于 等同这样的方式来产生js对象。 到这里我们知道如何在js中定义一个类了,接下来我们展示如何写一个cat 到这里,cat就继承了 animal 对象,类cat的一个实例对象c1拥有属性name,age,height,和方法play了。 那么 prototype起到了一个什么样的作用呢? prototype就好比一个指针,它指向一个object,这个object就称为子类对象的原型。当cat的对象被创建的时候,由于cat的构造函数拥有prototype属性,那么cat的实例就会间接指向这个原型对象了(说成间接的是因为每个object都有一个 constructor 属性指向它的构造函数)。 那么问题来了,“当我们修改对象 c1 的name属性的时候,会不会修改它prototype的name属性值呢?”,答案是否定的。 接下来详细解析: 1.访问name属性: 首先当我们第一次访问c1.name的属性的时候,我们会得到值“pipi”,这个和我们预料中的一样。但是计算过程你未必知道。 它计算的过程是这样的:第一步:检查c1对象中是否有name属性,找到的话就返回值,没有就跳到第二步,显然没有找到,因为cat的构造函数中没有定义。第二步:当第一步没有找时,去间接访问 prototype对象所指向的object,如果在 prototype对象中 找到的name属性的话,就返回找到的属性值。如果还是没有找到的话,再去递归地寻找 prototype对象的 prototype对象(去找它的爷爷) ,一直到找到name属性或者没有prototype对象为止。如果到最后还是没有找到name属性的话就返回undefined。 2.设定name属性:当我们设定c1对象的name属性时,及调用 c1.name= ' new name'; 这个过程就简单多了。首先检查是否对象已有该属性,若已存在则修改当前值,若不存在则为该对象新增一个属性并设定当前值。值得一提的是,在设定值的过程中没有去访问 prototype属性。 为了加深理解,我们再看一个 read-write-read 的过程,第一次read的时候,由于自己的对象没有name属性,那么就会返回的原型对象的name属性的值。第二步,写入name的值,同样没发现本身对象有name属性,那么就在本身对象上新建一个name属性,然后赋值。第三步,再次读取name属性,由于在第二步中已经新建了name属性,此时就返回在第二步中设定的值。值得一提的是,在这三步中没有改变原型对象的值。 好了,到此详细分析了 javascript对象是如果实现继承的,其实和其他的面向对象语言不一样的是,javascript的继承机制是对象的原型继承而不是类型继承。 呵呵,欢迎看完,有不对的地方欢迎大家讨论!

推荐整理分享javascript类继承机制的原理分析(js 类继承),希望有所帮助,仅作参考,欢迎阅读内容。

javascript类继承机制的原理分析(js 类继承)

文章相关热门搜索词:js继承的三种方法,js类继承的例子,js类继承的例子,js继承的三种方法,js类继承方法,js继承java类,js类继承的几种方式,js类继承的几种方式,内容如对您有帮助,希望把文章链接给更多的朋友!

javascript 面向对象编程 function也是类 但javascript中并没有类概念,所谓的类也是模拟而来,通过函数加闭包模拟出类成员及私有成员(关于闭包可以参见跨越边界:闭包)。这里我们将用比较平

javascript 面向对象编程 万物皆对象 javascript和java、C#等语言一样也具有面向对象的一些特征,但细比较的时候,会发现这些特征并不是真正的面向对象,很多地方都是利用对象本身来模拟

javascript 面向对象编程 聊聊对象的事 先看一下JSON(javascriptobjectnotation)对象,JSON是一种脚本操作时常用的数据交换格式对象,相对于XML来说JSON是一种比较轻量级的格式,在一些intelligence的IDE

标签: js 类继承

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

上一篇:javascript 类定义的4种方法(js定义数据类型)

下一篇:javascript 面向对象编程 function也是类(javascript面向对象精要pdf)

  • 个人所得税应如何缴纳
  • 进口洋酒能存放多少年
  • 个人怎么缴纳印花税
  • 年初结转增值税社保如何做账
  • 应交增值税已交税金是什么意思
  • 错账更正方法有哪几种
  • 政府回购土地免税政策
  • 砂石行业一般纳税人税率多少?能简易征收吗?
  • 资产处置损益是收入还是费用
  • 从业人数和资产总额是灰色
  • 收款未发货需要纳税吗
  • 高温补贴领取
  • 确认应收账款不确认收入
  • 劳务分包服务费率
  • 新会计准则要求
  • 金蝶软件开发服务费入什么科目?
  • 应纳税额减征额和减免税额一样吗
  • 2021年个人开发票税率
  • 所得税不能税前扣除项目
  • 控股合并吸收合并新设合并图示
  • 出票人账号是付款号吗
  • 个体工商户年检怎么办
  • 长期股权投资的账务处理
  • 苹果14pro max价格
  • PHP中使用全局变量来接受表单中提交的数据
  • 营业收入与营业成本之间的差额是
  • 拆迁货币什么意思
  • 支付给其他公司的工程项目管理费
  • 公司法人向公司借款未还,公司可以倒闭吗
  • PHP:pg_escape_string()的用法_PostgreSQL函数
  • 出租设备的租金收入应计入什么科目
  • 野生动植物种源包括
  • codelite怎么进行编译
  • PHP:imageantialias()的用法_GD库图像处理函数
  • 合规检查中检查不了的设备
  • php读取json数组中指定内容
  • 使用什么指令可以清空memcached数据库中的所有数据
  • abap webservice
  • 记载资金的账簿
  • 建筑业的印花税是按含税还是不含税?
  • 公司期货套期保值会计处理方法
  • 应交税费中印花税是什么
  • 沙箱支付宝app正式版
  • 分期收款方式确认收入的时间
  • 开票地址必须和营业执照上一样吗少个字号可以吗
  • mysql 5.5 5.6 5.7
  • 在建工程的土地可以查封吗
  • 开销项负数发票怎么做账
  • 文化事业建设税是含税还是不含税
  • 房地产会计分录怎么做
  • 劳保用品专卖
  • 减免进项税的分录怎么做
  • 低值易耗品一次性摊销会计科目
  • 税务房屋租赁发票的开具规定
  • 退回上年度企业所得税
  • 安装完xp系统直接蓝屏怎么办
  • windows server 2003 r2 序列号
  • windows.h在linux中
  • win10系统怎么设置电脑密码
  • ubuntu ftp服务器怎么搭建
  • win7 分区表
  • win7组合键失效
  • win7记事本功能
  • win7无法打开windows功能
  • hosts文件win10
  • python 自定义sort
  • cocos2dx游戏案例
  • Windows 7 OpenGL配置,解决“无法启动此程序,因为计算机中丢失glut32.dll。”
  • php滚动代码
  • 【ExpandableListView】ExpandableListView互斥展开效果
  • 基于贪心算法
  • 超实用的八个开车技巧
  • 安卓初始化
  • js math.js
  • python tcp编程
  • 纳税人识别号不能含有IOZSV
  • 车船税保险公司代收代缴后,单位还申报不?
  • 上海手撕发票多少钱一本
  • “老师你好”
  • 欠税多久法院立案
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设