位置: 编程技术 - 正文

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

  • 附加税有哪些?
  • 计提企业所得税会计科目
  • 缴纳个人所得税怎么算
  • 钢铁租赁公司
  • 不验旧可以领新车吗
  • 网上认证勾选平台登录不成功
  • 服务类公司没有营业执照
  • 建筑企业劳务工资必须要开劳务发票吗?
  • 煤矿企业维简费税务规定
  • 原材料亏损率怎么算
  • 期间费用如何设置项目核算
  • 哪些属于不动产权
  • 分公司如何缴纳企业所得税
  • 企业拆迁补偿款要交税吗
  • 企业为员工购买的补充医疗保险
  • 不同税率的产品可以开一张票里吗
  • 陈列费发票属于什么科目
  • 营改增行业销售额的规定
  • 电子发票已开出客户退款会计处理是怎样的?
  • 营改增后视同销售的税务处理怎么做?
  • 对子公司投资款要交税吗
  • 京东白条账单制和订单制是什么样的
  • edge浏览器总是打开新的网页
  • vmware download
  • Win10 (21H1)Build 19043.1266更新补丁KB5005611正式版发布:附修复更新内容
  • 增值税 劳务费
  • wirecut.exe
  • 销售机构人员工资属于管理费用吗
  • 子公司财务管理策略有哪些
  • 软件开发企业进项税额抵扣
  • 毛地黄长什么样
  • 期末余额和年初余额为什么不一样
  • 勘察测绘公司是做什么的
  • 基于matlab的随机森林回归和交叉验证
  • 注意力机制加在什么位置
  • deformable detr代码
  • sass和less的区别使用
  • 浅析Laravel5中队列的配置及使用
  • 定期定额征收超出3万怎么办
  • ps使用背景橡皮擦的时候需要按住什么键
  • python列表排序sorted
  • 没有发票的公账报销了怎么入账
  • 清算机构收单机构和发卡行
  • 围挡属于市政还是建筑
  • 如何理解合并报表编制程序中的调整与抵消处理
  • 坏账准备的账务处理会计分录
  • 劳务公司在外地
  • 固定资产无票怎样入账
  • 建筑发票可以一次性抵扣吗
  • 计提工会经费的工资总额包括五险一金吗
  • mysql安装不成功怎么办
  • count(10,2,5)
  • 文本效果设置在哪
  • mysql 连续日期
  • sqlserver数据库怎么导出
  • mysql未知的服务器主机
  • mysql 正则表达式分组替换
  • 安装metpy
  • windows搭建radius
  • win7桌面移到其他盘
  • win8隐藏任务栏怎么恢复
  • windows资源管理器在哪个文件夹
  • windows10 正式版
  • opengles和vulkan哪个好
  • excel如何制作登录界面代码
  • HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth完全详解
  • 月经其间可以吃消摇丸吗
  • Unity的Attribute(特性)还算多吧
  • python生成txt文档
  • DeviceOne 让你一见钟情的App快速开发平台
  • 获取某个div的高度
  • android study
  • javascript要怎么学
  • 用jquery
  • listview提高效率
  • js创建对象的方法有哪些
  • 电子税务局浏览器版本太低
  • 深圳国税局官网
  • 建筑装饰业发票怎么开
  • 武汉市江汉区财政局这个单位的公务员待遇怎么样?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设