当前位置:首页 > JavaScript

js实现类

2026-04-03 18:42:55JavaScript

JavaScript 实现类的方式

JavaScript 中可以通过多种方式实现类的概念,以下是几种常见的方法:

构造函数模式

使用构造函数和 new 关键字创建对象实例。构造函数名通常首字母大写以区分普通函数。

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.sayHello = function() {
    console.log(`Hello, my name is ${this.name}`);
  };
}

const person1 = new Person('Alice', 25);
person1.sayHello();

原型模式

通过原型链共享方法和属性,避免每个实例都创建相同的函数。

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

Person.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name}`);
};

const person1 = new Person('Alice', 25);
person1.sayHello();

ES6 类语法

ES6 引入了 class 关键字,语法更接近传统面向对象语言。

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  sayHello() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

const person1 = new Person('Alice', 25);
person1.sayHello();

工厂函数模式

使用闭包和对象字面量创建对象,无需 new 关键字。

js实现类

function createPerson(name, age) {
  return {
    name,
    age,
    sayHello() {
      console.log(`Hello, my name is ${this.name}`);
    }
  };
}

const person1 = createPerson('Alice', 25);
person1.sayHello();

使用 Object.create()

基于现有对象创建新对象,实现原型继承。

const personProto = {
  sayHello() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

const person1 = Object.create(personProto);
person1.name = 'Alice';
person1.age = 25;
person1.sayHello();

继承的实现

原型链继承

通过将子类的原型指向父类的实例实现继承。

function Parent(name) {
  this.name = name;
}

Parent.prototype.sayName = function() {
  console.log(this.name);
};

function Child(name, age) {
  Parent.call(this, name);
  this.age = age;
}

Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;

const child = new Child('Alice', 10);
child.sayName();

ES6 类继承

使用 extends 关键字实现继承。

js实现类

class Parent {
  constructor(name) {
    this.name = name;
  }

  sayName() {
    console.log(this.name);
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }
}

const child = new Child('Alice', 10);
child.sayName();

静态方法和属性

使用 static 关键字定义类级别的方法和属性。

class Person {
  static species = 'Homo sapiens';

  static describe() {
    console.log('This is a Person class');
  }

  constructor(name) {
    this.name = name;
  }
}

Person.describe();
console.log(Person.species);

私有字段和方法

ES2022 引入了真正的私有字段和方法,使用 # 前缀。

class Person {
  #privateField = 'secret';

  #privateMethod() {
    console.log('This is private');
  }

  publicMethod() {
    this.#privateMethod();
    console.log(this.#privateField);
  }
}

const person = new Person();
person.publicMethod();

Getter 和 Setter

使用 getset 关键字定义访问器属性。

class Person {
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }

  set fullName(name) {
    [this.firstName, this.lastName] = name.split(' ');
  }
}

const person = new Person('Alice', 'Smith');
console.log(person.fullName);
person.fullName = 'Bob Johnson';
console.log(person.firstName);

混入模式

通过组合多个对象的功能实现多重继承。

const canEat = {
  eat() {
    console.log('Eating');
  }
};

const canWalk = {
  walk() {
    console.log('Walking');
  }
};

function mixin(...mixins) {
  return function(target) {
    Object.assign(target.prototype, ...mixins);
  };
}

@mixin(canEat, canWalk)
class Person {}

const person = new Person();
person.eat();
person.walk();

JavaScript 提供了多种灵活的方式来实现类和面向对象编程,可以根据具体需求选择最适合的方法。

标签: js
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…