位置: 编程技术 - 正文

Javascript 学习笔记之 对象篇(二) : 原型对象(javascript学习指南)

发布时间:2024-02-27

推荐整理分享Javascript 学习笔记之 对象篇(二) : 原型对象(javascript学习指南),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript总结笔记,javascript如何学,javascript教程,javascript基础笔记,javascript怎么学,javascript基础笔记,javascript基础笔记,javascript基础笔记,内容如对您有帮助,希望把文章链接给更多的朋友!

Javascript 是唯一一个被广泛运用的原型式继承的语言,所以理解两种继承方式的差异是需要时间的。

第一个主要差异就是 Javascript 使用原型链来继承:

设置 Bar 的 prototype 为 Foo 的对象实例:

确保 Bar 的构造函数为本身,并新建一个 Bar 对象实例:

下面我们来看下整个原型链的组成:

在上面的例子中,对象 test 将会同时继承 Bar.prototype 和 Foo.prototype。因此它可以访问定义在 Foo 中的函数 method。当然,它也可以访问属性 value。需要提到的是,当 new Bar() 时并不会创建一个新的 Foo 实例,而是重用它原型对象自带的 Foo 实例。同样,所有的 Bar 实例都共享同一个 value 属性。我们举例说明:

原型链查找机制

当访问一个对象的属性时,Javascript 会从对象本身开始往上遍历整个原型链,直到找到对应属性为止。如果此时到达了原型链的顶部,也就是上例中的 Object.prototype,仍然未发现需要查找的属性,那么 Javascript 就会返回 undefined 值。

Javascript 学习笔记之 对象篇(二) : 原型对象(javascript学习指南)

原型对象的属性

尽管原型对象的属性被 Javascript 用来构建原型链,我们仍然可以值赋给它。但是原始值复制给 prototype 是无效的,如:

这里讲个本篇的题外话,介绍下什么是原始值:在 Javascript 中,变量可以存放两种类型的值,分别是原始值和引用值。

1.原始值(primitive value):

原始值是固定而简单的值,是存放在栈 stack 中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。原始类型有以下五种型: Undefined, Null, Boolean, Number, String。

2.引用值(reference value):

引用值则是比较大的对象,存放在堆 heap 中的对象,也就是说,存储在变量处的值是一个指针 pointer,指向存储对象的内存处。所有引用类型都集成自 Object。原型链性能问题

如果需要查找的属性位于原型链的上端,那么查找过程对于性能而言无疑会带来负面影响。当在性能要求必要严格的场景中这将是需要重点考虑得因素。此外,试图查找一个不存在属性时将会遍历整个原型链。同样,当遍历一个对象的属性时,所有在原型链上的属性都将被访问。

总结

理解原型式继承是写较为复杂的 Javascript 代码的前提,同时要注意代码中原型链的高度。当面临性能瓶颈时要学会将原型链拆分开来。此外,要将原型对象 prototype 和原型 __proto__ 区分开来,这里主要讨论原型对象 prototype 就不阐述关于原型 __proto__ 的问题了,

Javascript学习笔记之 对象篇(三) : hasOwnProperty //PoisoningObject.prototypeObject.prototype.bar=1;varfoo={goo:undefined};foo.bar;//1'bar'infoo;//truefoo.hasOwnProperty('bar');//falsefoo.hasOwnProperty('goo');//true在这里,只有hasOwnProperty

Javascript学习笔记之 对象篇(四) : for in 循环 先上范例://PoisoningObject.prototypeObject.prototype.bar=1;varfoo={moo:2};for(variinfoo){console.log(i);//printsbothbarandmoo}这里我们要注意两点,一是forin循环会忽略enumerable

Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式 函数声明functionfoo(){}函数foo将会在整个程序执行前被hoist(提升),因此它在定义foo函数的整个scope(作用域)中都是可用的。即使在函数定义之前调用它也

标签: javascript学习指南

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

上一篇:Javascript学习笔记之 对象篇(一) : 对象的使用和属性(javascript怎么学)

下一篇:Javascript学习笔记之 对象篇(三) : hasOwnProperty(javascript要怎么学)

  • 当年亏损额为什么不能填?
  • 酒店收入是以当月入账时间为准吗
  • 预缴税款可以抵税吗
  • 机械设备关税税率多少
  • 货拉拉电子货票收款凭证是发票吗
  • 信息技术服务企业研发费用加计扣除
  • 资助的开发经费可税前扣除吗
  • 以实物抵债账务协议
  • 会计差错更正业务处理怎么操作?
  • 固定资产正常报废如何处理
  • 全年一次性奖金计税方式2023
  • 减免税款怎么入账
  • 携税宝的费用可以全额抵扣吗
  • 增值税专用发票和普通发票的区别
  • 企业扣税账户没钱交税会怎么样?
  • 车辆维修费
  • 接待客户的住宿费账务处理
  • 租赁农民土地应该开发票吗
  • 境外施工
  • 两年内到期的应付票据
  • 开土地租赁发票需要交哪些税费
  • 购买超市购物卡打几折
  • 固定资产报废未折旧完会计处理
  • 个体户酒店服务业个税税率
  • 合同签订后税率调整
  • 去掉右键菜单中的快捷键
  • 苹果电脑屏幕键盘怎么去除
  • 最新cpu天梯表
  • 加班餐费税前扣除问题
  • linux安装方式有
  • PHP:mb_convert_variables()的用法_mbstring函数
  • phpurl编码
  • 未结算未取得发票怎么办
  • mac快捷键是什么意思
  • thinkphp 5.0.24 rce
  • 什么是西孟加拉邦首府
  • 其他应付款转营业外收入摘要
  • 债务重组亏损计入
  • 固定资产清理科目余额结转哪里
  • 企业如何做账报税流程
  • ts和js混用
  • 税收滞纳金的最新法律规定
  • ue4ui界面制作
  • setdo指令
  • php判断时间区间
  • opengl 图形
  • phpcms程序
  • antd pro v5
  • 已经抵扣的进项税额转出会计分录
  • sqlserver存储过程写法
  • mysql相关
  • mongodb 根据条件查询数量
  • 小企业会计准则和企业会计准则的区别
  • 研发费用固定资产如何入账
  • 分期付款购入固定资产该如何做账务处理呢?
  • 出差补助没票怎么做账
  • 应交税费应交增值税已交税金怎么用
  • 酒店购买的餐具可以退吗
  • 现代服务业包括哪些
  • mysql分页性能
  • win7系统命令激活
  • windows server 2003 standard
  • ubuntu选择语言
  • dds使用方法
  • centos6.10内核版本
  • yum源有什么用
  • mcshield.exe是什么进程
  • linux怎么格式化硬盘
  • win8怎么关闭电脑
  • linux小技巧
  • win7系统电脑开机密码怎么设置
  • JQuery.Ajax()的data参数类型实例详解
  • php和js的区别和联系
  • python求解析解
  • vb中chr$(13)是什么意思
  • nodejs实战教程
  • js左值
  • python 代码缩进
  • jQuery height()、innerHeight()、outerHeight()函数的区别详解
  • 江苏专家库申报在哪个网站
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号