博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6 Class基本用法
阅读量:6682 次
发布时间:2019-06-25

本文共 2057 字,大约阅读时间需要 6 分钟。

JavaScript 语言中,生成实例对象的传统方法是通过构造函数。下面是一个例子。

function Point(x, y) {  this.x = x;  this.y = y;}Point.prototype.toString = function () {  return '(' + this.x + ', ' + this.y + ')';};var p = new Point(1, 2);console.log(p.toString());

上面这种写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。

//定义类class Point {  constructor(x, y) {    this.x = x;    this.y = y;  }  toString() {    return '(' + this.x + ', ' + this.y + ')';  }}var  p = new Point(1,2);console.log(p.toString());

Point类除了构造方法,还定义了一个toString方法。注意,定义“类”的方法的时候,前面不需要加上function这个关键字,直接把函数定义放进去了就可以了。另外,方法之间不需要逗号分隔,加了会报错。

class Point {  constructor() {    // ...  }  toString() {    // ...  }  toValue() {    // ...  }}// 等同于Point.prototype = {  constructor() {},  toString() {},  toValue() {},};

constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。

class Point {}// 等同于class Point {  constructor() {}}
let person = new class {  constructor(name) {    this.name = name;  }  sayName() {    console.log(this.name);  }}('张三');person.sayName(); // "张三"

person是一个立即执行的类的实例。

Class 的静态方法

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。

class Foo {  static classMethod() {    return 'hello';  }}Foo.classMethod() // 'hello'var foo = new Foo();foo.classMethod()// TypeError: foo.classMethod is not a function

继承

//定义类class Point {  constructor(x, y) {    this.x = x;    this.y = y;  }  toString() {    return '(' + this.x + ', ' + this.y + ')';  }}class ColorPoint extends Point {  constructor(x, y, color) {    super(x, y); // 调用父类的constructor(x, y)    this.color = color;  }  toString() {    return this.color + ' ' + super.toString(); // 调用父类的toString()  }}var cp = new ColorPoint(1,2,'red');console.log(cp.toString());
class ColorPoint extends Point {}// 等同于class ColorPoint extends Point {  constructor(...args) {    super(...args);  }}

父类的静态方法,也会被子类继承。

class A {  static hello() {    console.log('hello world');  }}class B extends A {}B.hello()  // hello world

转载地址:http://vlxao.baihongyu.com/

你可能感兴趣的文章
html表单笔记
查看>>
我的友情链接
查看>>
nginx负载均衡的5种策略
查看>>
MyBatis学习总结(三)——优化MyBatis配置文件中的配置
查看>>
jsoup使用post方式查询和解析json
查看>>
翻译软件开发(do it yourself)
查看>>
《Java程序员的基本修养》读书笔记之内存回收
查看>>
鸟哥私房菜重温6
查看>>
适用于ASP等环境的JS日期选择控件
查看>>
rpm 与 yum 用法
查看>>
Oracle数据库新版本12c信息汇总
查看>>
【Oracle Database 12c新特性】 In-Database Archiving数据库内归档
查看>>
运维自动化之psutil模块
查看>>
mysql的复制原理以及复制类型
查看>>
iOS开发系统类功能划分
查看>>
知道IP地址的情况下,如何查看主机名
查看>>
SQL执行过程
查看>>
Puppet批量部署tomcat
查看>>
OSPF与Loopback地址
查看>>
mysql的sql执行计划详解
查看>>