位置: 编程技术 - 正文

JavaScript中的原型继承基础学习教程(js中的原型是什么)

编辑:rootadmin

推荐整理分享JavaScript中的原型继承基础学习教程(js中的原型是什么),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript原生,js的原型,javascript原生,js中的原型是什么,javascript的原型,原型链,有什么特点?,javascript中的原型和原型链,javascript原型,javascript原型,内容如对您有帮助,希望把文章链接给更多的朋友!

大多数编程语言中,都有类和对象,一个类可以继承其他类。在JavaScript中,继承是基于原型的(prototype-based),这意味着JavaScript中没有类,取而代之的是一个对象继承另一个对象。:)

1. 继承, the proto在JavaScript中,当一个对象rabbit继承另一了对象animal时,这意味着rabbit对象中将会有一个特殊的属性:rabbit.__proto__ = animal;当访问rabbit对象时,如果解释器在rabbit中不能找到属性,那么它会顺着__proto__链往上在animal对象中寻找栗子中的__proto__属性仅在Chrome和FireFox中可以访问,请看一个栗子:

eats属性是从animal对象中访问的。如果在rabbit对象中已经发现了属性,那么就不会去检查proto属性啦。再来一个栗子,当子类中也有eats属性时,父类中的就不会访问了。

你也可以在animal中添加一个函数,那么在rabbit中也可以访问了。

(1)rabbit.eat():rabbit.eat()函数以如下两步执行:首先,解释器查找rabbit.eat,rabbit中没有eat函数,那么它就顺着rabbit.__proto__往上找,在animal中找到了。函数以this = rabbit运行。this值与__proto__属性完全无关。因此,this.full = true在rabbit中:看看这里我们有什么新发现,一个对象调用了父类函数,但是this还是指向对象本身,这就是继承。被__proto__引用的对象称作是原型(prototype),animal是rabbit的原型(译者注:这就是rabbit的__proto__属性引用了animal 的prototype属性)(2)读时查找,不是写时当读取一个对象时,比如this.prop,解释器会在它的原型中查找属性。当设置一个属性值时,比如this.prop = value,那么就没有理由去查找了,这个属性(prop)会被直接添加到这个对象中(这里是this)。delete obj.prop也类似,它只删除对象本身的属性,原型中的属性保持原封不动。(3)关于proto如果你在阅读指南,这里我们叫的__proto__,在指南中表示为[[Prototype]]。双方括号是很重要的,因为有另一个属性叫做prototype。

2. Object.create, Object.getPrototypeOf__proto__是一个非标准的属性,由Chrome/FireFox提供访问,在其他的浏览器中保持不可见。所有的现代浏览器除了Opera(IE > 9)支持两个标准的函数来处理原型问题:

用给定了proto创建一个空对象:

上面代码创建了一个空rabbit对象,并且原型设置为animalrabbit对象创建好以后,我们可以往里添加属性了:

Object.creat函数的第二个参数props是可选的,它允许像新对象设置属性。这里就省略了,因为我们关系的继承。(1)Object.getPrototypeOf(obj)返回obj.__proto__的值。这个函数是标准的,可以在不能直接访问__proto__属性的浏览器中使用了。

现代浏览器允许读取__proto__属性值,但是不能设置。

3. The prototype有一些好的跨浏览器的方式设置__proto__属性,这将会使用构造器函数(constructor functions)。记住!任何函数创建一个对象都是通过new关键字的。一个栗子:

JavaScript中的原型继承基础学习教程(js中的原型是什么)

new操作将原型的属性设置到rabbit对象的的__proto__属性中了。让我们来看看它的原理,例如,new Rabbit 对象,而Rabbit是继承animal 的。

Rabbit.prototype = animal 字面量意味着:对所有由new Rabbit创建的对象设__proto__ = animal

4. 跨浏览器 Object.create(proto)Object.create(prop)函数功能的强大的,因为它允许从给定的对象直接继承。它可以由如下代码模拟:

inherit(animal) 与Object.create(animal)是完全等同的,返回一个空的对象,并且object.__proto__ = animal。一个栗子:

来看一下它的原理是什么:

(1) 创建了一个新函数,函数没有向this设置任何属性,以此`new F` 会创建一个空对象。(2) `F.prototype`被设置为proto(3) `new` F创建了一个空对象,对象的`__proto__ = F.prototype` (4) Bingo! 我们得到了一个继承`proto`的空对象这个函数广泛适用于各种库和框架之中。你的函数接受了一个带有options 的对象

。。。但是改变参数值可能会产生一些错误的结果,因为options可能会在外部代码中使用。一个解决办法就是克隆options对象,复制所有的属性到一个新的对象中,在新对象中修改,怎样用继承来解决这个问题呢? P.S. options可以添加设设置,但是不能被删除。Solution你可以继承options,并且在它的子类的中修改或者添加新的属性。

所有的操作只在子对象中有效,当Menu方法结束时,外部代码仍然可以使用没有修改的过的options对象。delete操作在这里非常重要,如果width是一个prototype中的属性,delete opts.width不会产生任何作用

5. hasOwnProperty所有的对象都有hasOwnProperty函数,它可以用来检测一个属性是否对象自身还是属于原型一个栗子:

6. Looping with/without inherited propertiesfor..in循环输出一个对象的所有属性,包括自身的和原型的。

用hasOwnProperty可以过滤得到属于对象自己的属性:

7. SummaryJavaScript是通过一个特殊的属性proto来实现继承的当访问一个对象的属性时,如果解释器不能在对象中找到,它就会去对象的原型中继续寻找 对函数属性来说,this指向这个对象,而不是它的原型。赋值obj.prop = value, 删除delete obj.prop管理proto:Chrome和FireFox可以直接访问对象的__proto__属性,大多数现代浏览器支持用Object.getPrototypeOf(obj)只读访问。Object.create(proto) 可以用给定的proto生成空的子对象,或者通过如下代码达到相同的功能:

其他方法:for..in循环输出一个对象的所有属性(包括自身的和原型的)和对象的原型链。如果一个属性prop属于对象obj那么obj.hasOwnProperty(prop)返回true,否则返回false。

JavaScript中的prototype原型学习指南 原型是什么Function类型有一个属性prototype,直接翻译过来就是原型。这个属性就是一个指针,指向一个对象,这个对象包含一些属性和方法,这些属性和

详解JavaScript中的自定义事件编写 我们可以自定义事件来实现更灵活的开发,事件用好了可以是一件很强大的工具,基于事件的开发有很多优势(后面介绍)。与自定义事件的函数有Event

快速解决Canvas.toDataURL 图片跨域的问题 如题,在将页面的图片地址进行本地输出时(Html2Canvas.js),因不同源存在跨域问题,会出现toDataURL访问权限问题:【Redirectatorigin'

标签: js中的原型是什么

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

上一篇:javascript创建对象的几种模式介绍(javascript创建对象)

下一篇:JavaScript中的prototype原型学习指南(JavaScript中的数据类型分为两大类)

  • 计算应交增值税并结转未交增值税怎么做用友
  • 一般纳税人申报纳税的流程
  • 行政事业单位购买固定资产的流程
  • 金税盘业务
  • 坏账核销的会计规定
  • 审计报告印花标
  • 代扣代缴个税对企业所得税的影响
  • 收回已核销的坏账什么意思
  • 卖二手车发票如何做账?
  • 商业收入会计分录
  • 实收资本印花税税率多少
  • 母公司与子公司之间的资金往来
  • 并购对利润的影响
  • 企业间借贷利息规定
  • 一般纳税人开具房屋租赁费税率
  • 企业不能抵扣的专票有哪些
  • 合并报表盈余公积跟母公司有什么关系
  • 是否有综合所得申报是什么意思
  • 小规模纳税人增值税超过30万怎么纳税
  • 收入和成本都是真实发生的但是不匹配
  • 现金日记账对方科目是什么意思
  • 自然人收税管理
  • 代扣代缴境外增值税可以抵扣
  • 企业研发人员数量在哪里查
  • win7桌面快捷键是什么
  • 长期待摊费用摊销明细表
  • 设计费要计入固定费用吗
  • 金蝶软件反年结账怎么弄
  • 发票上没有校验码
  • 免税不能开专票
  • 如何安装u盘的系统
  • 商业会计结转成本
  • videojs自定义按钮
  • 让绿萝疯长的妙招
  • 如何进行企业商务谈判
  • vue调整图标大小
  • 商品先入库后得发票如何做账
  • PHP:imagecolorclosesthwb()的用法_GD库图像处理函数
  • php处理数组的函数
  • 劳动保护经费
  • 关联方核对
  • 前后端交互用什么技术
  • php数据的提交与采集实验报告
  • cv计算机视觉定义
  • 捐赠收入要交所得税吗
  • 公司购买办公楼需要缴纳城镇土地使用税吗
  • 单位结余资金该如何处理
  • 预充值发票可以报销吗
  • 公允价值变动损益借贷方向增减
  • 出口退税的会计科目
  • 开发票的销售收入正规的做账如何做?
  • 公司银行开户费用怎么报销
  • 个人账户转公司账户附言写什么
  • 低值易耗品和物料用品的区别
  • 会计事务所给的发票
  • 资产负债表中应付职工薪酬是负数
  • 应缴纳房产税的房产
  • 清算后剩余财产股东拒收怎么办
  • 企业接受捐赠的固定资产,应增加营业外收入
  • 劳务费需要通过应付职工薪酬科目核算吗
  • 实收资本包括哪些项目
  • 明细账的设置与登记
  • win10 9月更新 问题
  • Win10预览版桌面图标和任务栏不翼而飞怎么办?
  • window10怎样格式化u盘
  • 如何打开和关闭HMB
  • win10系统浏览器怎么换成ie
  • win8任务栏设置在哪
  • 塔防游戏二战
  • js定义函数的几种方法
  • android 音频焦点丢失 媒体按键
  • cssdeck
  • unity3d初学者教程视频
  • JavaScript bold方法入门实例(把指定文字显示为粗体)
  • 北京税务总局
  • 哈尔滨工业大学录取分数线2023年
  • 办理出口退税需要销售合同吗
  • 什么是重点群体
  • 太平税务局电话
  • 国税是哪几种
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设