ES6中Class的基本用法

有一段时间没有写Class了,突然遇到几个点有不确定了。在这里回顾整理一下。

主要内容

  • class是什么
  • 如何定义一个class
  • class的兼容性

Class是什么

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

在ES6没有出来之前, 通过prototype一样可以开心的玩耍。

function F(val){
	// 对象属性
	this.x = val
}
// 对象方法
F.prototype.f1 = function () {
	console.log(this.x)
}
// 实例化对象
var obj = new F(1)
// 调用对象的方法
obj.f1(1) // 1

现在,可以改成:

class F {
  constructor(val) {
    this.x = val;
  }
  f1() {
  	console.log(this.x)
  }
}

看起来与标准的面向对象的语言更接近一些。

最基本的Class的使用

要掌握最基本的使用方式,只需要知道如下5点:

  1. 构造器
  2. 对象属性
  3. 静态属性
  4. 对象方法
  5. 静态方法

构造器

要使用class,首先要了解的是构造器。 这样来理解它:

  • 它是一函数,它的名字是固定的:constructor
  • 在new 实例时,它会被自动调用,并传入实参
  • 一个class必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加
class F {
	constructor(..arg) {
		console.log(arg)
	}
}
var obj = new F('a',[1,2,3]) // ["a", [1,2,3]]

对象属性

有两种方式:

  • 方式1 写在构造器内部
  • 方式2 写在构造器外部
class F {
	// 1. 写在构造器外部
  a = Math.random()
  constructor () {
  // 2.写在构造器外部
    this.b = 2
  }
}

静态属性

相比于成员属性,静态属性是指类特有的属性,不属于某个特定的对象,它只能通过类名来访问。

有两种方式:
方式1:直接以对象的属性格式加在类名上
方式2:写在类中,用static修饰

class F {
    // 方法2:写在类中,用static修饰
	static b = 2
}
// 方法1:直接加在类名上
F.a = 1

成员方法

类的实例所共享

class F {
  f1() {
    return 'hello';
  }
}
var obj = new F(),
    obj1 = new F()
console.log(obj.f1 === obj1.f1) // true
console.log(obj.f1 === F.prototype.f1) // true

静态方法

与静态属性类似,也有两种添加的方式:

  1. 方式一: 直接给class添加方法
  2. 方式二:写在成员方法前添加一个static修饰
class F {
  // 方式二:写在成员方法前添加一个static修饰
  static f1() {
    console.log('this',this)
  }
}
// 方式一: 直接给class添加方法
F.f2 = function () {
  console.log('this', this)
}
F.f1()
F.f2()

要注意的是:它内部的this不是提向某个对象,而是这个类。

兼容性

注意:在ie中完全不能使用。
在这里插入图片描述
参考:caniuse

小结

本文介绍了ES6中Class的基本用法。希望对你有帮助。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ES6 class是一种用于定义对象的语法糖,它可以更方便地定义类和继承。 1. 定义类 要定义一个类,可以使用class关键字,后面跟类名,类名通常首字母大写。 ```javascript class Person { constructor(name, age) { this.name = name; this.age = age; } sayHello() { console.log(`Hello, my name is ${this.name}.`); } } ``` 上面的代码定义了一个名为Person的类,它有一个构造函数和一个方法sayHello。构造函数接受两个参数name和age,用于初始化对象的属性。sayHello方法用于输出对象的名字。 2. 创建对象 要创建一个类的对象,可以使用new关键字,并传入构造函数需要的参数。 ```javascript const person = new Person('Tom', 18); console.log(person.name); // 'Tom' console.log(person.age); // 18 person.sayHello(); // 'Hello, my name is Tom.' ``` 上面的代码创建了一个名为person的对象,它的名字是Tom,年龄是18,然后调用了它的sayHello方法输出了自己的名字。 3. 继承 要继承一个类,可以使用extends关键字,并指定父类的名称。 ```javascript class Student extends Person { constructor(name, age, grade) { super(name, age); this.grade = grade; } study() { console.log(`I'm studying in grade ${this.grade}.`); } } ``` 上面的代码定义了一个名为Student的类,它继承自Person类。Student类有一个构造函数和一个方法study。构造函数接受三个参数name、age和grade,其前两个用于初始化父类的属性,后一个用于初始化自己的属性。study方法用于输出学生的年级。 4. 调用父类方法 在子类,可以使用super关键字调用父类的方法或属性。 ```javascript class Student extends Person { constructor(name, age, grade) { super(name, age); this.grade = grade; } sayHello() { super.sayHello(); console.log(`I'm a student in grade ${this.grade}.`); } } ``` 上面的代码重新定义了Student类的sayHello方法,并在其调用了父类的sayHello方法。这样,每次调用子类的sayHello方法时,都会先输出父类的信息,然后再输出子类的信息。 5. 静态方法 类可以定义静态方法,通过类名调用,而不是通过对象调用。 ```javascript class Calculator { static add(a, b) { return a + b; } static subtract(a, b) { return a - b; } } ``` 上面的代码定义了一个名为Calculator的类,它有两个静态方法add和subtract,用于执行加法和减法运算。这些方法可以直接通过类名调用,而不需要先创建对象。 ```javascript console.log(Calculator.add(1, 2)); // 3 console.log(Calculator.subtract(3, 2)); // 1 ``` 上面的代码分别调用了Calculator类的add和subtract方法,输出了它们的计算结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值