位置: 编程技术 - 正文

深入了解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(关于中秋节的古诗)

  • 建筑行业小规模纳税人免税政策
  • 货运代理费属于运费还是其他
  • 母公司帮子公司偿还债务
  • 政府补助递延收益和其他收益的区别
  • 无形资产有合同约定,怎么摊销?
  • 去年的进项发票今年还能抵扣吗
  • 先结转损益还是先结转本年利润
  • 收到借户过账资金的短信
  • 期初数录错了怎么改
  • 逐步测试法计算内含报酬率
  • 无法确认退货率时,差错更正为啥不反转增值税
  • 计提地税走哪个科目
  • 申报开票是什么意思
  • 小规模纳税人一个季度多少免税
  • 出口退税可以不申报是否需要缴纳增值税
  • 年末所得税账务处理
  • 关联企业借款利息扣除
  • 增值税和消费税的区别和联系
  • 企业注销固定资产处理
  • 预付款能开发票吗?
  • win11资源管理器卡死
  • 工业园租金大概是多少
  • 房产税的征收范围为
  • 间接费用是什么费用
  • 防伪税控开票系统技术维护费
  • thinkphp yii
  • win11咋截屏
  • 国产操作系统两项全球第一
  • 耕地占用税的税收优惠
  • 怎么做年终结算工资
  • bhvc.exe
  • 羊肚菌的功效和价格
  • 多提附加税跨年怎么计算
  • element栅格布局
  • 开发成本属于哪个会计准则
  • vscode前端必备扩展
  • 加收税收滞纳金属于行政处罚吗
  • 销售自用的小汽车赚钱吗
  • 个人提供劳务怎么去税务局开发票
  • 进项转出了还能再转进去吗
  • mysql无法连接到服务器
  • mysql profiles
  • php 缓存
  • 为什么社保明细导不出来
  • 以前年度损益调整结转到本年利润吗
  • 其他应付款需要结转损益吗
  • 国外货物进入保税仓需要办理什么
  • 企业所得税申报错误怎么更改
  • mysql数据库命名 可以用-吗
  • 单位食堂不对外营业需不需要办理经营许可证
  • 股权转让个人所得税怎么算
  • 财务软件是有哪些软件
  • 实物出资没有发票怎么办
  • 补付预付账款账务处理分录
  • 暂估有几种处理方法
  • 会计处理的相关知识点
  • 销售边角废料属于什么
  • 汇兑损益的账务处
  • 职工教育经费如何列支
  • 医疗器械行业进货未取得发票怎么做会计分录的
  • 购进农产品直接销售核定扣除
  • 怎样填写记账凭证
  • 企业预付账款怎么做账
  • SQL Server中使用Trigger监控存储过程更改脚本实例
  • mac电脑自带软件介绍
  • 腾讯linux服务器
  • win10wifi总是掉线
  • javascript访问用户cookie
  • unity shaders and effects cookbook
  • java gravity
  • cacls命令怎么运用
  • js学习教程
  • node.js 核心http模块,起一个服务器,返回一个页面的实例
  • javascript新手教程
  • 电子税务局打印发票提示本机未检测到
  • 车辆购置税怎样做账
  • 企业吸收合并资质转移办理
  • 税控发票开票软件金税盘版发票未报送什么情况?
  • 国家税务总局2011年34号公告
  • 税务师 领证
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设