范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

JavaScript原型链prototypeproto详解

  1、背景
  Javascript的继承模型、原型链等等概念比较晦涩难懂, 很多人过去在使用Javascript的时候并没有刻意去搞明白其中的原理,今天笔者一步一步分析一下JavaScript中的继承、原型链、prototype、__proto__。 笔者并不打算写过多的文字解释原理,而是希望将原理总结成代码片段更便于理解。
  2、JavaScript继承是如何实现的?
  你只需要知道JavaScript 是通过名叫原型链的东西来实现继承的,依托于constructor.prototype属性(构造函数的prototype属性)即可。 你现在并不需要明白原型链是什么东西我会在下面一步一步详解。
  3、 javascript通过prototype实现继承
  function Animal() {    this.echo=function () {        console.log("I am An Animal....")    };    this.value=1; } function Monkey() {  } //将构造函数Monkey的prototype属性设置为一个Animal的对象,Monkey就拥有了Animal的所有属性和方法 Monkey.prototype=new Animal(); new Monkey().echo(); console.log(new Monkey().value);
  4、prototype、__proto__解析区别
  我们知道在JavaScript中我们可以通过new 创建一个对象,我们是根据一个函数模板创建一个对象。也就是说如下代码
  Animal函数便是函数模板,类似C++/java等的类的概念,然而 new Animal出来的就是对象的概念。
  function Animal() {    this.echo=function () {        console.log("I am An Animal....")    };    this.value=1; }
  代码1
  __proto__属性是对象的一个属性,在ECMAScript规范中是不暴露的,但是有些浏览器可以访问到,对象的这个属性值就是函数模板的prototype值,
  不知道这样说是不是不容易理解,换一个方式吧 :对象.__proro__===函数模板.prototype,前提这个对象时 这个函数new出来的。
  5、通过设置上下文this的方式实现继承
  我们都知道函数中在可以使用this引用当前上下文, 下面这段代码就是通过设置构造函数的上下文this的方式实现了继承,下面我给出两段代码分别仔细阅读下,琢磨一下代码所表达的意思。
  代码1
  function Animal() {     this.echo=function () {         console.log("I am An Animal....")     };     this.value=1; } //创建一个字面对象 三个方式都创建了对象 var obj1=new function () {}; var obj2={}; var obj3=[] //分别将三个对象设置成Animal构造函数的上下文 并且调用Animal函数,那么这个时候Animal函数中的this=obj1,obj2,obj3 Animal.call(obj1); Animal.call(obj2); Animal.call(obj3); obj1.echo(); obj2.echo(); obj3.echo();
  代码2
  function Animal() {     this.echo=function () {         console.log("I am An Animal....")     };     this.value=1; }  function  Monkey() {     Animal.call(this); } new Monkey().echo();6、什么是原型链?
  这个概念其实比较好理解,如果我们调用一个对象的一个方法,如何这个方法不存在那么就回去他的__proto__寻找,如果找到直接返回,如果没找到那么继续__proto__.__proto__中寻找,就像如下代码这样, B是如何找到value的。
  代码1
  var A={value:1}; var B={}; B.__proto__=A; console.log(B.value);
  function A() {     this.value=1; } function B() { } B.prototype=new A(); console.log(new B().__proto__.value);
  代码3
  function A() {     this.value=1; } function B() { } B.prototype=new A(); console.log(new B().value);
  7、总结一些关于JavaScript 继承、类型判断 、prototype的用法
  判断一个字面定义数组的原型的类型,输出是[object Array]Object.prototype.toString.call([1].__proto__)
  下面演示了数组和对象的关系, 原型链 []->Array->Object 下面返回true
  Object.prototype===[].__proto__.__proto__
  [].__proto__.__proto__.toString()
  instanceof - JavaScript | MDN
  Object.prototype.toString([])
  通过call调用toString方法并且设置上下文获取真实类型
  console.log(Object.prototype.toString.call([])); console.log(Object.prototype.toString.call(/x/)); console.log(Object.prototype.toString.call(/x/)); console.log([].__proto__.__proto__.toString.call(/x/ig)); console.log([].__proto__.__proto__.toString.call(null));
  输出结果

有多少人会买vivo和oppo?放图,开炮1800能买到3000,除了不要脸,还能说什么?愿意买的,不知道是穷得只剩钱了只剩钱了还是店铺销售太漂亮了?好吧,我屌丝,ov粉都是高富帅,白富美。去手机店大概ov销售能怎么做好快递驿站,有什么要注意什么?怎么选择一个好的快递代收点?快递代收点不是凭空建立的,需要通过加盟申请的方式入驻。一般而言,快递代收点常见的两种类型为第三方代收平台快递直营店。第三方代收平台在市场上较为多见,而快烂摊子留给美团,自己套现15亿完美退场,胡玮炜比你想象的精明不知道各位还记得前几年的共享单车大战吗?我们很多人都成为了共享单车的韭菜。其中,时至今日还有很多人的押金尚未退还。共享单车从最初的混战,在历经几年的行业洗牌期之后,如今逐渐形成了三互联网大厂薪资真相年薪百万有多难?文王琳要攒够100万需要多久?对于近10亿月收入在2000元以下的人口而言,不吃不喝至少需要42年。但是对于那些在腾讯工作的新生代民工而言,这只需要1年多的时间。因为,根据腾讯第三快手电商举办服务商赋能培训会,上线操盘分佣系统近日,快手电商第一届赋能培训会顺利举办,会上宣布快手电商直播运营专家委员会成立,暨第一届直播运营私享会召开。包括快手电商负责人笑古在内的10人作为委员会成员参会,超40家核心服务商7款你没理由拒绝的高质量小众APP,款款都是黑科技,请低调使用手机作为每个人随身必备的通讯工具,里面也隐藏着许多实用的黑科技软件,今天就来给大家分享7款高质量小众APP,款款都是黑科技,请低调使用!一实用工具箱说到工具箱,大家一定都会想到一个华为(中华有为)VS联想(只要你想)正义不会迟到我们没有评论的资格,但是我们支持正义作为老百姓不会评论,也轮不到我们吐槽,只觉得社会不能缺少正义,最近司马南先生的视频公布了很多老百姓远不能及的事,坚定支持正义。1联想(只要你想)荣耀30Pro和V40两款手机8256的性价比而言哪个比较好?相较于动辄五六千大洋起步的华为PMate系列机型,荣耀旗下的旗舰机会是一个更实惠的选择。虽然华为荣耀已经分家,但彼此血脉相连,这是业界公认的事实。不过数来数去,目前也唯有荣耀V40关于联想5G标准短码未投票给华为的事件影响2018年的5G投票已经过去三年。华为在短码上以微弱劣势输了。在我看来这次投票输的不仅仅是标准那么简单。我们来理一理事件结束之后发生的一些事情。2018年12月1日,孟晚舟女士在加RON引爆关注,Fish。Pro首发行业前瞻性投资战略RONIOU衍生品Part1GameFi热潮当道,RON横空出世近期,链游王者AxieInfinity母公司发布了一则引爆加密市场的独家新闻他们将在其游戏专用Ronin侧链正式上线RON,同时,其去保险圈的大事,要变天了?文七七(IDse7enmoney)01hr要说最近保险圈的大事,就是互联网保险新规了。十月下旬时,银保监会下发了关于进一步规范保险机构互联网人身保险业务有关事项的通知。这份通知里,
纸价上涨!芯片就算了,我国连造纸也能被卡脖子?众所周知,由于我国在芯片领域起步较晚,所以至今没有多少世界顶级的芯片公司。在技术上更是跟国外有着不小的差距,导致被西方国家卡脖子。就拿手机芯片来说,我国除了华为麒麟芯片,似乎已经没升级鸿蒙,通知栏米味,桌面果味昨儿手机收到了系统的更新提示,和一批内测和新老朋友唠唠系统,我们来看一下新的系统,旧的华为EMIUI系统有什么差别?看到更新日志的时候,很多人都对万物互联之旅这个字产生期待值,鸿蒙中兴壁纸ZTEAxon30Ultra内置原生壁纸中兴Axon30Ultra是中兴于2021年4月15日发布的智能手机。中兴Axon30Ultra搭载高通骁龙888旗舰处理器,正面采用209的6。67英寸AMOLED柔性曲面屏,内Hutool实现IO相关操作IOUtilFIleUtilFileTypeUtil等操作三今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您。架构开源地址httpsgitee。commsxy评论转发Hutool概述IO的操作包括读和写,应用场景包括网络操200多元就能买到的8款备用机,难道不香吗OPPOR11s屏幕采用6。01英寸AMOLED材质屏幕高度约155。1毫米,宽度约75。5毫米,顶部厚约7。1毫米,重量约153克。配有香槟色黑色红色三种颜色OPPOR11s搭载推动互联网良性向前运转,宜人贷Decorator装饰器功不可没身边很多工程师每天过得都很充实,接触到前端后端服务器技术,不断提升自己。成功是一步步走出来的,学习没有什么捷径可言。每个语言都有其特性及适用场景,存在即合理是这个世界不变的真理。就红魔新机官宣25日发布联名变形金刚4月21日消息,今天早上红魔游戏手机官方微博带来新机预热。能量觉醒,LetsRollOut!4月25日1500,红魔联名变形金刚新品发布会见!另外官方还额外给出了一则预热视频,从视3000元左右买这几款手机不仅性能强还屏幕好而且拍照也不错大家好,我是爱机狂人。今天给大家推荐几款3000元左右的畅销机型,不仅性能强,屏幕好,而且拍照也不错。赶紧点赞收藏起来吧!第一款红米K50Pro这次的红米K50Pro可以说非常具有IQOOneo6官方渲染图曝光新添一款黑爵AG玻璃,直呼真高端博主数码闲聊站今天(4月6日)爆出了IQOOneo6官方渲染图,其中就有此前爆出的朋克素皮款,这次外加一款黑爵AG玻璃,直呼外观真高端!IQOOneo6正面的设计不变,依旧是居中打我国计算力水平位居全球第二中国青年报讯(中青报中青网记者张渺)近日,由清华大学全球产业研究院浪潮信息和国际数据公司联合推出的20212022全球计算力指数评估报告(以下简称报告)在北京发布。报告认为,全球各东航理赔,家属可以拿多少?3月27日,东航客机空难事件已正式启动理赔程序,132名遇难者家属可以拿到多少赔偿金呢?专家建议赔偿标准提高的100万,能实现吗?3月21日下午,东航客机在梧州上空发生事故坠毁,造