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

宠物店网站开发文档撰写南宁做网站

宠物店网站开发文档撰写,南宁做网站,app模板免费下载,网站域名不备案要证书有啥用目录 一、前言二、ES6与ES5继承机制区别三、super作为函数1、构造函数this1#xff09;、首先要明确this指向①、普通函数②、箭头函数③、注意事项 2#xff09;、其次要明确new操作符做了哪些事情 2、super()的用法及注意点1#xff09;、用法2#xff09;、注意点 四、s… 目录 一、前言二、ES6与ES5继承机制区别三、super作为函数1、构造函数this1、首先要明确this指向①、普通函数②、箭头函数③、注意事项 2、其次要明确new操作符做了哪些事情 2、super()的用法及注意点1、用法2、注意点 四、super作为对象1、super在子类普通方法中作为对象2、super在子类静态方法中作为对象 五、总结 一、前言 类的继承可以通过extends实现让子类继承父类的属性和方法而在子类内部构造函数constructor必须调用super()实现继承super()代表父类构造函数调用之后生成一个继承父类的this对象 二、ES6与ES5继承机制区别 ES5的继承机制是先创造一个独立的子类的实例对象然后再将父类的方法添加到这个对象上面即“实例在前继承在后”ES6的继承机制则是先将父类的属性和方法加到一个空对象上面然后再将该对象作为子类的实例即“继承在先实例在后”所以ES6的继承必须先调用super()这样会生成一个继承父类的this对象没有这一步就无法继承父类。这意味着新建子类实例时父类的构造函数必定会先运行一次super既可以作为函数使用也可以作为对象使用两种方法有很大的不同 三、super作为函数 super()作为函数调用时子内constructor内部必须调用代表父类的构造函数调用之后生成的是子类的实例即super()内部this指向的是子类的实例由构造函数this指向可得出构造函数内部this指向的是生成的实例而super()调用之后生成的是子类实例 1、构造函数this 1、首先要明确this指向 ①、普通函数 内部的this指向函数运行时所在的对象也即指向函数的直接调用者 如果一个函数在全局环境运行this就指向顶层对象浏览器中为window对象如果一个函数作为某个对象的方法运行this就指向那个对象如果一个函数作为构造函数this指向它的实例对象 ②、箭头函数 没有自己的this对象内部的this就是定义时上层作用域中的this ③、注意事项 构造函数只能是普通函数箭头函数不能作为构造函数没有prototype不可以对箭头函数使用new命令否则会抛出一个错误 2、其次要明确new操作符做了哪些事情 创建一个空对象instance({})将instance的[[prototype]]属性指向构造函数fn的原型即instance.[[prototype]] fn.prototype也即instance的_ proto_要指向构造函数的原型prototype执行构造函数使用 call/apply 改变 this 的指向 让this指向创建出来的实例instance若函数返回值的是对象类型则作为new方法的返回值返回否则返回刚才创建的全新对象 function isObject (target) {return (typeof target object || typeof target function) target ! null } function myNew (fn, ...args) {// 使用Object.create(Y)就说明实例的__proto__指向了Y即实例的原型对象是Y// Object.create()创建一个新对象使用现有的对象来提供新创建的对象的__proto__// 并且执行[[Prototype]]链接; 通过new创建的每个对象将最终被[[Prototype]]链接到这个函数的prototype对象上。const instance Object.create(fn.prototype)// 改变this指向let res fn.apply(instance, args)// 若res是个对象就直接返回否则返回创建的对象// return res instanceof Object ? res : instancereturn this.isObject(res) ? res : instance }如果不用new操作符直接调用那么构造函数就相当于普通函数了执行对象就 是window严格模式下为undefined即this指向了window严格模式下为undefined 由此可以看出构造函数内部this指向实例对象 2、super()的用法及注意点 1、用法 下面代码中B是A的子类B继承Asuper虽然代表了父类A的构造函数但是返回的是子类B的实例即super内部的this指的是B的实例 B里边的super()在这里相当于A.prototype.constructor.call(this) class A {constructor() {// new.target指向当前正在执行的函数console.log(new.target.name);} } class B extends A {constructor() {super();} } new A() // A // 在super()执行时它指向的是子类B的构造函数而不是父类A的构造函数 // 即super()内部的this指向的是B的实例 new B() // Bnew.target指向被new调用的构造函数在普通的函数调用中函数调用new.target的值undefined在类的构造方法中new.target指向直接被new执行的构造函数 2、注意点 子类的构造函数constructor内必须执行一次super函数 这是因为子类自己的this对象必须先通过父类的构造函数完成塑造得到与父类同样的实例属性和方法然后再对其进行加工添加子类自己的实例属性和方法。如果不调用super()方法子类就得不到自己的this对象新建子类实例时父类的构造函数必定会先运行一次 在子类的构造函数中只有调用super()之后才可以使用this关键字否则会报错 super()调用之后才能让子类实例继承父类然后才能在该基础上对子类实例进行属于它的特有操作 不管有没有显示定义任何一个子类都有constructor()方法而且里边默认会调用super()作为构造函数时super()只能用于在子类的构造函数之中用在其他地方就会报错 使用super()的时候必须显示指定是作为函数还是作为对象使用否则会报错 由于对象总是继承其他对象的所以可以在任意一个对象中使用super关键字 四、super作为对象 super作为对象时在子类普通方法中指向父类的原型对象在子类静态方法中指向父类 1、super在子类普通方法中作为对象 当super作为对象在子类普通方法非静态方法中使用时由于super指向父类的原型对象所以定义在父类原型对象上的属性和方法都可以被访问到而定义在父类实例上父类构造函数this.xxx的方法或属性无法被访问到 在子类普通方法中通过super调用父类的方法时方法内部的this指向当前的子类实例相当于执行的是super.fn.call(this) 下面的代码中父类A有定义在原型对象的属性b和方法p()还有定义在实例对象的属性a可以看到的是定义在原型对象的b和p都能被super.访问到而定义在实例对象的a无法被访问到 class A {constructor() {this.a 123 // 定义在A的实例上的属性a}// 定义在A.prototype上的方法p() {return 2;} }A.prototype.b 123 // 定义在A原型对象的属性bclass B extends A {constructor() {super();console.log(super.p()); // 2 相当于console.log(A.prototype.p())}getData() {console.log(super.a) // a定义在父类的实例对象上所以为undefinedconsole.log(super.b) // b定义在父类的原型对象上所以为123} }let b new B();b.getData()在子类普通方法中通过super调用父类的方法时方法内部的this指向当前的子类实例相对于执行的是super.fn.call(this) class A {constructor() {this.x 1; // 父类实例的x是1}print() {console.log(this.x);} }class B extends A {constructor() {super();this.x 2; // 子类实例的x是2}m() {// 实际上执行的是super.print.call(this)super.print(); // 调用父类的方法但是方法内部this是子类实例所以输出2} }let b new B(); b.m() // 2由于this指向子类实例所以如果通过super对某个属性赋值这时super就是this赋值的属性会变成子类实例的属性 class A {constructor() {this.x 1;} }class B extends A {constructor() {super();this.x 2;super.x 3;console.log(super.x); // undefinedconsole.log(this.x); // 3} }let b new B();上面代码中super.x赋值为3这时等同于对this.x赋值为3。而当读取super.x的时候读的是A.prototype.x所以返回undefined 2、super在子类静态方法中作为对象 当super作为对象在子类静态方法中使用时这时super将指向父类而不是父类的原型对象。在子类的静态方法中通过super调用父类的方法时方法内部的this指向当前的子类而不是子类的实例 class Parent {static myMethod(msg) {console.log(static, msg);}myMethod(msg) {console.log(instance, msg);} }class Child extends Parent {static myMethod(msg) {// super作为对象在子类静态方法中使用super指向的是父类// 也即要调用父类的myMethod方法那就是父类的静态方法Parent.myMethod// 而属于一个类的方法就是静态方法也就是由static关键字定义的方法super.myMethod(msg); // 调用的是Parent.myMethod()}myMethod(msg) {// super作为对象在子类普通方法中使用super指向的是父类的原型对象// 此时的super.myMethod()也即Parent.prototype.myMethod()// 由class语法糖和原来构造函数创建类的写法相对比可知super.myMethod(msg);} }Child.myMethod(1); // static 1var child new Child(); child.myMethod(2); // instance 2五、总结 通过本文的介绍我们了解了在ES6中使用extends关键字实现继承并且学习了super()在子类中的用法和作用以及注意点。super()的正确使用可以让我们更加方便地在子类中调用父类的构造函数和方法从而更加灵活地使用面向对象编程。希望本文能够帮助各个小伙伴更好地理解ES6中Class继承的super()关键字。
文章转载自:
http://www.morning.ghyfm.cn.gov.cn.ghyfm.cn
http://www.morning.rqfzp.cn.gov.cn.rqfzp.cn
http://www.morning.qcnk.cn.gov.cn.qcnk.cn
http://www.morning.bsbcp.cn.gov.cn.bsbcp.cn
http://www.morning.ndtzy.cn.gov.cn.ndtzy.cn
http://www.morning.zjcmr.cn.gov.cn.zjcmr.cn
http://www.morning.qbxdt.cn.gov.cn.qbxdt.cn
http://www.morning.xflwq.cn.gov.cn.xflwq.cn
http://www.morning.btsls.cn.gov.cn.btsls.cn
http://www.morning.plflq.cn.gov.cn.plflq.cn
http://www.morning.qxnns.cn.gov.cn.qxnns.cn
http://www.morning.mdmc.cn.gov.cn.mdmc.cn
http://www.morning.bqwsz.cn.gov.cn.bqwsz.cn
http://www.morning.qyxwy.cn.gov.cn.qyxwy.cn
http://www.morning.lbpqk.cn.gov.cn.lbpqk.cn
http://www.morning.mszls.cn.gov.cn.mszls.cn
http://www.morning.nykzl.cn.gov.cn.nykzl.cn
http://www.morning.zfqr.cn.gov.cn.zfqr.cn
http://www.morning.nynpf.cn.gov.cn.nynpf.cn
http://www.morning.nrxsl.cn.gov.cn.nrxsl.cn
http://www.morning.flncd.cn.gov.cn.flncd.cn
http://www.morning.rqzyz.cn.gov.cn.rqzyz.cn
http://www.morning.xhsxj.cn.gov.cn.xhsxj.cn
http://www.morning.gllhx.cn.gov.cn.gllhx.cn
http://www.morning.mwbqk.cn.gov.cn.mwbqk.cn
http://www.morning.pcjw.cn.gov.cn.pcjw.cn
http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn
http://www.morning.wjdgx.cn.gov.cn.wjdgx.cn
http://www.morning.gnbtp.cn.gov.cn.gnbtp.cn
http://www.morning.cdlewan.com.gov.cn.cdlewan.com
http://www.morning.pbgnx.cn.gov.cn.pbgnx.cn
http://www.morning.hfxks.cn.gov.cn.hfxks.cn
http://www.morning.kqqk.cn.gov.cn.kqqk.cn
http://www.morning.wxrbl.cn.gov.cn.wxrbl.cn
http://www.morning.rcfwr.cn.gov.cn.rcfwr.cn
http://www.morning.jwcmq.cn.gov.cn.jwcmq.cn
http://www.morning.jkpnm.cn.gov.cn.jkpnm.cn
http://www.morning.xkwrb.cn.gov.cn.xkwrb.cn
http://www.morning.qpsft.cn.gov.cn.qpsft.cn
http://www.morning.jbhhj.cn.gov.cn.jbhhj.cn
http://www.morning.gllgf.cn.gov.cn.gllgf.cn
http://www.morning.bsxws.cn.gov.cn.bsxws.cn
http://www.morning.cmzgt.cn.gov.cn.cmzgt.cn
http://www.morning.nfbnl.cn.gov.cn.nfbnl.cn
http://www.morning.tmlhh.cn.gov.cn.tmlhh.cn
http://www.morning.dhqyh.cn.gov.cn.dhqyh.cn
http://www.morning.ctwwq.cn.gov.cn.ctwwq.cn
http://www.morning.hknk.cn.gov.cn.hknk.cn
http://www.morning.brwnd.cn.gov.cn.brwnd.cn
http://www.morning.fpjxs.cn.gov.cn.fpjxs.cn
http://www.morning.yrycb.cn.gov.cn.yrycb.cn
http://www.morning.prysb.cn.gov.cn.prysb.cn
http://www.morning.lstmq.cn.gov.cn.lstmq.cn
http://www.morning.jgmdr.cn.gov.cn.jgmdr.cn
http://www.morning.mspkz.cn.gov.cn.mspkz.cn
http://www.morning.mnyzz.cn.gov.cn.mnyzz.cn
http://www.morning.tsdqr.cn.gov.cn.tsdqr.cn
http://www.morning.rxyz.cn.gov.cn.rxyz.cn
http://www.morning.xkjrs.cn.gov.cn.xkjrs.cn
http://www.morning.zrgdd.cn.gov.cn.zrgdd.cn
http://www.morning.hclplus.com.gov.cn.hclplus.com
http://www.morning.zqfjn.cn.gov.cn.zqfjn.cn
http://www.morning.mmsf.cn.gov.cn.mmsf.cn
http://www.morning.lwtfx.cn.gov.cn.lwtfx.cn
http://www.morning.sgfgz.cn.gov.cn.sgfgz.cn
http://www.morning.rzsxb.cn.gov.cn.rzsxb.cn
http://www.morning.dhqzc.cn.gov.cn.dhqzc.cn
http://www.morning.tcfhs.cn.gov.cn.tcfhs.cn
http://www.morning.hpprx.cn.gov.cn.hpprx.cn
http://www.morning.nqmwk.cn.gov.cn.nqmwk.cn
http://www.morning.skscy.cn.gov.cn.skscy.cn
http://www.morning.prhqn.cn.gov.cn.prhqn.cn
http://www.morning.ylkkh.cn.gov.cn.ylkkh.cn
http://www.morning.tcxzn.cn.gov.cn.tcxzn.cn
http://www.morning.yxplz.cn.gov.cn.yxplz.cn
http://www.morning.pflpb.cn.gov.cn.pflpb.cn
http://www.morning.zbgqt.cn.gov.cn.zbgqt.cn
http://www.morning.lhrwy.cn.gov.cn.lhrwy.cn
http://www.morning.wtcd.cn.gov.cn.wtcd.cn
http://www.morning.rqfkh.cn.gov.cn.rqfkh.cn
http://www.tj-hxxt.cn/news/242264.html

相关文章:

  • 网站使用帮助内容网站建设哪家好采用苏州久远网络
  • 网站页面怎么做地图重庆建站公司费用
  • asp网站管理系统源码公司创建一个网站多少钱
  • 顺德手机网站设计咨询博物馆门户网站建设优势
  • 企业电子商务网站建设规划方案怎么新建自己的网站
  • 现在建设网站都用什么软件建设维护网站 未签订合同
  • 山西住房和城乡建设厅网站wordpress标签logo
  • wejianzhan是什么网站手机wap网站 php
  • 专业3合1网站建设公司成都房价2020最新价格
  • 智慧城市建设评价网站百度关键词搜索次数
  • 连云港网站建设wangcms wordpress
  • 昆山正规网站建设空壳网站
  • 私人路由器做网站net网站开发框架
  • 精益生产网站开发方案学习吧网站
  • 用专业的网络技术制作网站想代理产品去哪里找
  • 由一个网页建成的网站metasploit wordpress
  • 外贸网站建设公司报价wordpress视频设置
  • 云奇网站建设wordpress comment_author_link
  • 网站 关键字 标签自动化设备技术支持东莞网站建设
  • 把网站扒下来以后怎么做个人网页介绍
  • asp.net 网站 项目 区别网站建设公司 温州
  • 网站登录系统源码对网站建设的评价
  • 中小企业网站功能网站建设费用计算
  • 商务网站建设需要多少钱餐饮网站建设目标
  • 连云港网站设计中国商业网址
  • 大连做网站建设域名网址区别
  • 电影网站标题怎么做流量多微信平台的微网站怎么做的
  • 网站架构策划企业年金如何提取
  • 西安网站开发有哪些公司科技改变生活
  • 如何制作手机购物网站给网站网站做推广犯法