当前位置: 首页 > news >正文

山西建设网官方网站网站开发建设中

山西建设网官方网站,网站开发建设中,福州seo外包公司,做号网站吗理解原型的几个关键点#xff1a; 1、所有的引用类型#xff08;数组、函数、对象#xff09;可以自由扩展属性#xff08;除null以外#xff09;; 2、所有的引用类型#xff08;对象#xff09;都有一个’_ _ proto_ _属性(也叫隐式原型#xff0c;它是一个普通的对…理解原型的几个关键点 1、所有的引用类型数组、函数、对象可以自由扩展属性除null以外; 2、所有的引用类型对象都有一个’_ _ proto_ _属性(也叫隐式原型它是一个普通的对象)指向原型对象 3、所有的函数都有一个’prototype’属性(这也叫显式原型它也是一个普通的对象该对象就是函数的原型对象对象中包含所有实例对象可以共享的属性和方法)。’prototype’属性是函数独有的任何函数在创建的时候其实会默认同时创建该函数的prototype对象; 4、所有引用类型它的’_ _ proto_ _属性指向它的构造函数的’prototype’属性所以  函数._ _ proto_ _ function.prototype; 5、当试图得到一个对象的属性时如果这个对象本身不存在这个属性那么就会去它的’_ _ proto_ _属性(也就是它的构造函数的’prototype’属性)中去寻找。 6、constructor属性也是对象才拥有的指向该对象的构造函数。函数创建的对象.__proto__ 该函数.prototype该函数.prototype.constructor该函数本身故通过函数创建的对象即使自己没有constructor属性它也能通过__proto__找到对应的constructor所以任何对象最终都可以找到其构造函数null如果当成对象的话将null除外   原型 先来看一个原型的例子。 //这是一个构造函数function Foo(name,age){this.namename;this.ageage;}/*根据要点3所有的函数都有一个prototype属性这个属性是一个对象再根据要点1所有的对象可以自由扩展属性于是就有了以下写法*/Foo.prototype{// prototype对象里面又有其他的属性showName:function(){console.log(Im this.name);//this是什么要看执行的时候谁调用了这个函数},showAge:function(){console.log(And Im this.age);//this是什么要看执行的时候谁调用了这个函数}}var fnnew Foo(小明,19)/*当试图得到一个对象的属性时如果这个对象本身不存在这个属性那么就会去它构造函数的prototype属性中去找*/fn.showName(); //Im 小明fn.showAge(); //And Im 19这就是原型很好理解。那为什么要使用原型呢 试想如果我们要通过Foo()来创建很多很多个对象如果我们是这样子写的话 function Foo(name,age){this.namename;this.ageage;this.showNamefunction(){console.log(Im this.name);}this.showAgefunction(){console.log(And Im this.age);}}那么我们创建出来的每一个对象里面都有showName和showAge方法这样就会占用很多的资源。 而通过原型来实现的话只需要在构造函数里面给属性赋值而把方法写在Foo.prototype属性(这个属性是唯一的)里面。这样每个对象都可以使用prototype属性里面的showName、showAge方法并且节省了不少的资源。   原型链 理解了原型那么原型链就更好理解了。 #####下面这段话可以帮助理解原型链 根据要点5当试图得到一个对象的属性时如果这个对象本身不存在这个属性那么就会去它构造函数的’prototype’属性中去寻找。那又因为’prototype’属性是一个对象所以它也有一个’_ _ proto_ _属性。 // 构造函数function Foo(name,age){this.namename;this.ageage;}Object.prototype.toStringfunction(){//this是什么要看执行的时候谁调用了这个函数。console.log(Im this.name And Im this.age);}var fnnew Foo(小明,19);fn.toString(); //Im 小明 And Im 19console.log(fn.toStringFoo.prototype.__proto__.toString); //trueconsole.log(fn.__proto__ Foo.prototype)//trueconsole.log(Foo.prototype.__proto__Object.prototype)//trueconsole.log(Object.prototype.__proto__null)//true是不是觉得有点奇怪我们来分析一下。 首先fn的构造函数是Foo()。所以fn._ _ proto _ _ Foo.prototype 又因为Foo.prototype是一个普通的对象它的构造函数是Object所以Foo.prototype._ _ proto _ _ Object.prototype 通过上面的代码我们知道这个toString()方法是在Object.prototype里面的当调用这个对象的本身并不存在的方法时它会一层一层地往上去找一直到null为止。 所以当fn调用toString()时JS发现fn中没有这个方法于是它就去Foo.prototype中去找发现还是没有这个方法然后就去Object.prototype中去找找到了就调用Object.prototype中的toString()方法。 __proto__属性的作用就是当访问一个对象的属性时如果该对象内部不存在这个属性那么就会去它的__proto__属性所指向的那个对象父对象里找一直找直到__proto__属性的终点null再往上找就相当于在null上取值会报错。通过__proto__属性将对象连接起来的这条链路即我们所谓的原型链。   另外在使用原型的时候一般推荐将需要扩展的方法写在构造函数的prototype属性中避免写在_ _ proto _ _属性里面。   总结 当所有的实例对象都需要共享属性和方法时通过原型来实现就是将属性方法放在实例对象的构造函数的prototype属性中该属性值就是原型对象包含共享属性和方法  访问一个对象的属性时先在基本属性中查找如果没有再沿着__proto__这条链向上找这就是原型链。根据原型链可以确定继承关系。由于所有的对象的原型链都会找到Object.prototype因此所有的对象都会有Object.prototype的方法。这就是所谓的“继承”。对象引用类型通过instanceof来判断。版权声明文章内容主要综合来自链接处 https://blog.csdn.net/qq_36996271/article/details/82527256 https://blog.csdn.net/cc18868876837/article/details/81211729
http://www.pierceye.com/news/295057/

相关文章:

  • 江苏商城网站制作公司网站备案时间
  • 网站开发用到什么技术公司做影视网站侵权
  • 自己做网站大概多少钱唐山丰南建设局网站
  • 建设法律法规文本查询网站什么是建设型的网站
  • 如何设计一个购物网站如何免费网络营销推广
  • 网站制作服务好的商家做网站送的企业邮箱能用吗
  • 免费行情软件app网站排行企业内部网站如何建设
  • 沧州网络运营中心在哪里新的seo网站优化排名 网站
  • 米拓建站免费模板wordpress那个主题收录好
  • 网站后台中小型网站建设的基本流程
  • 一键做网站的软件爱互融网站开发合同
  • 平顶山市哪里有做网站的高端的扬中网站建设
  • 网站定制电话如何自己开公众号
  • app开发网站建设及开发专业济南网站建设价格
  • 网站建设新闻分享免费制作网站app
  • 海口网站建设高端wordpress 论坛那
  • 谁能帮我做网站百度推广登录平台怎么收费
  • 有关于网站建设的论文如何开发一个微信公众号
  • 深圳网站建制作网上写文章用什么软件
  • 网站模版自适应网站建设全包方案
  • 广州网站建设鞍山家电网站首页制作
  • 西安注册公司网站网站建设找a金手指
  • 浙江省住房和城乡建设厅网站打不开设计书籍频道开放说明
  • 阿里巴巴 网站建设遵义网警
  • 宁夏建设厅网站官网如何做DJ网站
  • 龙岩做网站公司哪家好erp系统与网站对接长沙
  • 做二手房需要用到哪些网站搜集房源找人做设计的网站
  • 建设银行河北分行招聘网站可以下载新闻视频的网站
  • 凡客官网旗舰店襄阳seo关键词优化公司
  • 区域门户网站源码健身网站建设