类的基本语法

定义类

类声明

定义类的一种方法是使用类声明。要声明一个类,你可以使用带有class关键字的类名。ES6引入了基于类的语法,使得对象的创建更加接近传统的面向对象编程语言。

class MyClass {
  // 构造函数
  constructor() {
    // 构造函数体
  }
  // 实例字段
  myField = "foo";
  // 实例方法
  myMethod() {
    // myMethod 体
  }
  // 静态字段
  static myStaticField = "bar";
  // 静态方法
  static myStaticMethod() {
    // myStaticMethod 体
  }
  // 静态块
  static {
    // 静态初始化代码
  }
  // 字段、方法、静态字段、静态方法、静态块都可以使用私有形式
  #myPrivateField = "bar";
}

函数构造器

在ES6之前,JavaScript使用构造函数和原型链来创建具有类似特性的对象。这种方式不使用 class 关键字,而是使用普通函数和 new 关键字来创建对象。

使用函数作为构造函数。上面的模式大致可以转换为以下函数构造器

function MyClass() {
  this.myField = "foo";
  // 构造函数体
}
MyClass.myStaticField = "bar";
MyClass.myStaticMethod = function () {
  // myStaticMethod 体
};
MyClass.prototype.myMethod = function () {
  // myMethod 体
};

(function () {
  // 静态初始化代码
})();

function Pig(name, age, gender) {
    this.name = name;
    this.age = age;
    this.gender = gender;
}

Pig.prototype.speak = function() {
    console.log('Oink!');
};

let piggy = new Pig('Porky', 2, 'Male');
piggy.speak(); // Oink!

在这个例子中,Pig 是一个构造函数,用来初始化新对象的 nameagegender 属性。speak 方法被添加到 Pig 的原型上,这意味着所有通过 Pig 构造函数创建的对象都共享这个方法。

注意

  • 实例化函数构造器时没有参数时可以省略 ()

类表达式

类表达式是定义类的另一种方法。类表达式可以命名或不命名。命名类表达式的名称是该类体的局部名称。也就是通过对象字面量来定义类。

这种方法已经直接创建了对象

// 未命名/匿名类
let Rectangle = class {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};
console.log(Rectangle.name);
// output: "Rectangle"

// 命名类  此时Rectangle的类名为Rectangle2
let Rectangle = class Rectangle2 {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};
console.log(Rectangle.name);
// 输出:"Rectangle2"

约定写法

  1. 它们的命名以大写字母开头
  2. 它们只能能由 new 操作符来执行

创建对象

在声明一个类后,可以通过 new 运算符来创建它的实例。

const myInstance = new MyClass();
console.log(myInstance.myField); // 'foo'
myInstance.myMethod();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值