位置: 编程技术 - 正文

深入了解javascript中的prototype与继承(深入了解的高级表达)

编辑:rootadmin

通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性列表。javascript创建对象时采用了写时复制的理念。只有构造器才具有prototype属性,原型链继承就是创建一个新的指针,指向构造器的prototype属性。prototype属性之所以特别,是因为javascript时读取属性时的遍历机制决定的。本质上它就是一个普通的指针。构造器包括: 1.Object2.Function3.Array4.Date5.String

下面我们来举一些例子吧

我们的目的是要表示 1.表明Person继承自Animal2. 表明p2是Person的实例

我们修改一下prototype属性的指向,让Person能获取Animal中的prototype属性中的方法。也就是Person继承自Animal(人是野兽)

但如果我们这么修正 Person.prototype = new Animal();Person.prototype.constructor = Person;这时p2.consturctor是对了,指向的是Person,表示p2是Person类的实例,但是新问题出现了。此时目的2达到了,目的1没达到。目的1和目的2此时互相矛盾,是因为此时prototype表达了矛盾的两个意思,1表示父类是谁2作为自己实例的原型来复制因此我们不能直接使用prototype属性来表示父类是谁,而是用getPrototypeOf()方法来知道父类是谁。

就把这两个概念给分开了

最后总结一下:当代码var p = new Person()执行时,new 做了如下几件事情:

创建一个空白对象

创建一个指向Person.prototype的指针

将这个对象通过this关键字传递到构造函数中并执行构造函数。

如果采用Person.prototype = Animal.prototype来表示Person继承自Animal, instanceof方法也同样会显示p也是Animal的实例,返回为true.之所以不采用此方法,是因为下面两个原因:

1.new 创建了一个新对象,这样就避免了设置Person.prototype.constructor = Person 的时候也会导致Animal.prototype.constructor的值变为Person,而是动态给这个新创建的对象一个constructor实例属性,这样实例上的属性constructor就覆盖了Animal.prototype.constructor,这样Person.prototype.constructor和Animal.prototype.contructor就分开了。

2.Animal自身的this对象的属性没办法传递给Person

通过使用 hasOwnProperty()方法,什么时候访问的是实例属性,什么时候访问的是原型属性就 一清二楚了。

推荐整理分享深入了解javascript中的prototype与继承(深入了解的高级表达),希望有所帮助,仅作参考,欢迎阅读内容。

深入了解javascript中的prototype与继承(深入了解的高级表达)

文章相关热门搜索词:深入了解对方的36个问题,深入了解图片,深入了解求助者时首先要进行工作室,深入了解求助者时首先要进行工作室,深入了解的高级表达,深入了解英语,深入了解对方的36个问题,深入了解javascript特性读后感,内容如对您有帮助,希望把文章链接给更多的朋友!

关于jQuery $.isNumeric vs. $.isNaN vs. isNaN 在jQuery中,有几种方式可以判断一个对象是否是数字,或者可否转换为数字。首先,jQuery.isNaN()在最新版本中已经被移除了(1.7之后),取而代之的是jQu

在Javascript中 声明时用"var"与不用"var"的区别 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不

js作用域及作用域链概念理解及使用 要理解变量的作用域范围就得先理解作用域链用var关键字声明一个变量时,就是为该变量所在的对象添加了一个属性。作用域链:由于js的变量都是对

标签: 深入了解的高级表达

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

上一篇:谈谈JavaScript中的函数与闭包(请问在javascript程序中)

下一篇:关于jQuery $.isNumeric vs. $.isNaN vs. isNaN(关于中秋节的古诗)

  • 进项税额转出完整会计分录怎么做 案例
  • 装修设计合同印花税
  • 社保与个税有关系么
  • 少数股东损益是
  • 月末只有进项税需要把转出未交增值税转到未交增值税
  • 电子发票和纸质发票只能二选一吗
  • 如何根据资产负债表填写现金流量表
  • 有期末留抵税额增值税和附税还用计提和缴纳吗
  • 个人住房转让纳税标准
  • 增值税纳税表销售额的填写
  • 小规模纳税人1%税收优惠
  • 工厂生产的配件怎么入账
  • 长期股权投资是什么科目
  • 递延收益在现金流量表体现吗
  • 单位卖报纸的钱算什么
  • 土地使用税的免征政策
  • 本月损益类怎么结转
  • 资产负债表怎么看平不平
  • php实现上传图片到数据库
  • php安装教程详解
  • 华硕win10笔记本如何恢复出厂设置
  • 消费税组成计税价格公式推导
  • 补充医疗保险是六险吗
  • PHP:session_id()的用法_Session函数
  • php图片加文字水印
  • 酒店的押金怎么做账
  • 用友预收货款账务处理
  • 基于中国国情的中国式现代化具有哪些特色
  • 现金折扣的会计分录处理
  • 银行汇票未用退回情况说明
  • 科研项目财政拨款多少
  • php代码提示
  • dac模型
  • cnpm安装成功为什么用不了
  • php curlfile
  • elementui的表格
  • 企业所得税本期已预交怎么算
  • 合并报表的收入就是相加么
  • 建立分公司流程
  • 印花税零申报操作流程
  • 基本户转到法人账户会计分录
  • 差旅费津贴要交税吗怎么算
  • sqlserver2016维护计划
  • 一般计税增值税预缴税款怎么算
  • 纳税人防伪税控设备未抄报怎么办
  • 购买方如何申请红字信息表填写负数吗
  • 承包经营的承包人工资能税前扣除吗
  • 购进商品售价金额核算
  • 福利费可以计入销售费用吗
  • 实收资本不到账怎么处理
  • 外币存款利息是不是外币
  • 什么是固定资产清理
  • mysql的基本介绍
  • centos7配置tomcat
  • window 开机启动
  • win7总是更新怎么办
  • win8.1应用商店还能用吗
  • Windows2008 对决 Windows Vista优势
  • linux中samba服务器的设计方案
  • ghost后恢复
  • window8系统桌面啥样的
  • 当ie7不认!important之后 [布局的解决办法]
  • cocos2dx schedule
  • jQuery ajax的功能实现方法详解
  • ffmpeg webui 0.9.6
  • win10下载杀毒软件
  • vue3官方文档
  • 编写一个bash脚本程序,用for循环实现
  • 批处理倒计时30秒内打开文件a,否则30秒后执行文件b
  • 获取标签的属性值的方式
  • 防止shell脚本重复执行
  • python struct库
  • jquery知识点总结
  • 全国低保查询系统网站
  • 网络发票管理系统
  • 建筑垃圾清运属于什么应税服务
  • 税务鉴定收费标准
  • 税务局窗口人员工作内容
  • 工商变更与税务变更为什么不能同步
  • 非中山户籍学生可以自己买医保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设