es6的面向对象

es5里面有面向对象,为啥es6里面还要出一个新的面向对象,因为es5里面的面向对象没有统一的写发,而es6为统一写法提供了函数处理。

class 类的生命

constructor() 构造函数的申明 构造函数初始化的属性承载器

extends 关键字实现继承 (父类和超类)

super() 继承方法 相当于A.prototype.constructor.call(this)

1 通过 extends关键词实现继承 ,这边es5通过写u给原型链的实现的继承方便清晰的多

class Anima{  //父类
  constructor(name){  
     this.name = name  
  }  
  say(){  
    let a = 2  
    console.log('my name is',this.name)  
  }  
}  


class Cat extends Anima{  
constructor(name,age){   //构造函数
     super(name);   //继承关键词 --- 类似 call 改变this指向
     this.age =age;  
  }  
  eat(){  
     console.log(`i like fish...`,this.age )  
  }  
}  


var b = new Anima('我是x','我是y');
b.say(); //结果  我是x
b.eat(); //结果  我是y

。。。注意在子类的constructor方法中,只有调用super之后,才可以使用this关键字,否则会报错。

class Cat extends Anima{  
constructor(name,age){   //构造函数
this.name=name //这样会报错 error
     super(name);   //继承关键词 --- 类似 call 改变this指向
     this.age =age;  
  }  
  eat(){  
     console.log(`i like fish...`,this.age )  
  }  
}

super这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。

第一种情况,super作为函数调用时,代表父类的构造函数。ES6 要求,子类的构造函数必须执行一次super函数。

class A {}

class B extends A {
  constructor() {
    super();
  }
}

第二种情况,super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类

class A {
  p() {
    return 2;
  }
}

class B extends A {
  constructor() {
    super();
    console.log(super.p()); // 2
  }
}

let b = new B();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • class的基本用法 概述 JavaScript语言的传统方法是通过构造函数,定义并生成新对象。下面是一个例子: ...
    呼呼哥阅读 4,130评论 3 11
  • JavaScript面向对象程序设计 本文会碰到的知识点:原型、原型链、函数对象、普通对象、继承 读完本文,可以学...
    moyi_gg阅读 772评论 0 2
  • 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化、多态、和封装几种技术。对 JavaSc...
    吴佳浩阅读 527评论 0 4
  • 简介 Class可以通过extends关键字实现继承。 上面代码定义了一个ColorPoint类,该类通过exte...
    oWSQo阅读 693评论 0 1
  • 上班倦得人欲倒, 脚下无力似轻飘。 全为不敢将家忘, 就算累趴也忍住。
    楚南巍峰阅读 603评论 2 3