位置: 编程技术 - 正文

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

  • 如何分辨海关完税凭证的真假?
  • 流转税解释
  • 租赁合同印花税双方都要交吗
  • 垫付运费的运费税怎么做分录
  • 企业搬迁到外省之前的债务怎么处理
  • 公司接受投资会计科目
  • 每股收益无差别点公式
  • 银行汇票转给第三方怎么操作
  • 计提税费怎么写分录
  • 费用怎么暂估
  • 从银行取现回单怎么取
  • 固定资产领用原材料要考虑增值税吗?
  • 会计差旅费属于什么会计科目
  • 境外企业开票没有税号怎么办?
  • 城建税税收减免政策
  • 收以前年度租金
  • ktv的发票可以报销吗
  • 出让方式取得土地使用权会计处理
  • 本月已认证发票还能撤销吗
  • 研发费用的
  • win11怎么看电脑配置
  • 路由器死机的表现
  • 企业收到财政资金
  • 会计差错更正账务处理 对股价影响
  • 少计提的地税怎么做分录
  • 提供给生产工人的住房的租赁费用应计入
  • 怎么看iPhone电池温度
  • 事业单位基建账并入大账规定
  • 增值税税控系统折旧
  • php数组函数输出《咏雪》里有多少"片"字
  • 耕地使用税的征收标准
  • php写文件函数
  • 贴现带息与不带息公式
  • 餐厅的餐具怎么摆
  • 字节在互联网什么地位
  • Http协议之Content-Type理解
  • IDEA 2022专业版创建Java Web项目(保姆式小白讲义,强烈建议入手!)
  • php file函数
  • mkpart命令
  • 客户不要的专票我们可以不作废吗
  • 销售旧货怎么填写申报表
  • 关于非营利组织企业所得税免税收入问题的通知
  • 三联发票是哪三联颜色分别
  • mysql嵌套语句
  • 小规模附加税减免政策2023
  • 购买图书的会计账务处理
  • 未确认融资费用摊销额怎么计算
  • 无形资产摊销是当月增加当月摊销吗
  • 未认证key
  • mariadb10安装
  • 企业所得税汇算清缴时间
  • 固定资产小汽车折旧怎么计提
  • 员工借款怎么处理
  • 年报和汇算清缴的顺序
  • 税务代扣社保怎么办理?
  • 账簿的概念与分类
  • SSB(SQLservice Service Broker) 入门实例介绍
  • sqlserver 修改列类型
  • mysql怎么修改my.ini
  • ubuntu ftp服务开启
  • linux终端怎么运行
  • centos编译环境
  • excel自动关闭如何设置
  • squid服务器配置
  • 电脑系统win8怎么样
  • Extjs gridpanel 出现横向滚动条问题的解决方法
  • Android---60---Notification 通知栏的简单使用
  • 金庸笔下十大最受欢迎人物
  • 备份mbr引导
  • django中的model
  • bat 批处理文件
  • [置顶]从lv2开始开挂的原勇者候悠闲的异世界生活
  • javascriptcsdn
  • JavaScript中的NaN代表什么
  • node-js
  • javascript例题
  • android开发范例实战宝典
  • 刷android go
  • 税务一体化监督起主导作用的是
  • 福建省农业厅副厅长梁
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设