当前位置:首页 > JavaScript

JS如何实现面向对象

2026-01-30 17:51:07JavaScript

基于原型的面向对象实现

JavaScript 采用基于原型的面向对象模式,通过构造函数和原型链实现继承。构造函数用于定义对象的属性和方法,原型用于共享方法和属性。

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

Person.prototype.greet = function() {
  return `Hello, my name is ${this.name}`;
};

const person1 = new Person('Alice', 25);
console.log(person1.greet());

使用 class 语法糖

ES6 引入了 class 语法,使面向对象编程更接近传统语言风格。class 本质仍是基于原型的语法糖。

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

  greet() {
    return `Hello, my name is ${this.name}`;
  }
}

const person2 = new Person('Bob', 30);
console.log(person2.greet());

实现继承

JavaScript 通过原型链实现继承。子类可以继承父类的属性和方法,并可以添加或覆盖它们。

class Employee extends Person {
  constructor(name, age, jobTitle) {
    super(name, age);
    this.jobTitle = jobTitle;
  }

  greet() {
    return `${super.greet()} and I work as ${this.jobTitle}`;
  }
}

const employee = new Employee('Charlie', 35, 'Developer');
console.log(employee.greet());

封装与访问控制

虽然 JavaScript 没有内置的访问修饰符,但可以通过闭包或 Symbol 实现类似效果。

class BankAccount {
  #balance = 0; // 私有字段

  deposit(amount) {
    if (amount > 0) this.#balance += amount;
  }

  getBalance() {
    return this.#balance;
  }
}

const account = new BankAccount();
account.deposit(100);
console.log(account.getBalance());

多态实现

JavaScript 的动态类型系统天然支持多态,不同对象可以对相同方法名做出不同响应。

class Animal {
  speak() {
    return 'Some sound';
  }
}

class Dog extends Animal {
  speak() {
    return 'Woof!';
  }
}

class Cat extends Animal {
  speak() {
    return 'Meow!';
  }
}

const animals = [new Animal(), new Dog(), new Cat()];
animals.forEach(animal => console.log(animal.speak()));

对象组合优于继承

在复杂场景下,使用对象组合比深度继承更灵活。通过将功能分解为独立对象并组合使用。

JS如何实现面向对象

const canSwim = {
  swim() {
    return 'Swimming';
  }
};

const canFly = {
  fly() {
    return 'Flying';
  }
};

class Duck {
  constructor() {
    Object.assign(this, canSwim, canFly);
  }
}

const duck = new Duck();
console.log(duck.swim(), duck.fly());

分享给朋友:

相关文章

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

如何实现vue

如何实现vue

安装 Vue.js 使用 npm 或 yarn 安装 Vue.js。确保已安装 Node.js 环境。 npm install vue # 或 yarn add vue 创建 Vue 实例 在 HT…

vue如何实现增删

vue如何实现增删

使用 Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是具体实现方法: 数据定义与初始化 在 Vue 组件的 data 选项中定义数组来存储需要操作的数据项…

vue如何实现原理

vue如何实现原理

Vue 实现原理的核心机制 Vue.js 的核心实现原理基于响应式系统、虚拟 DOM 和组件化设计。以下是关键机制的详细解析: 响应式系统 Vue 通过 Object.defineProperty(…

如何实现语音react

如何实现语音react

语音识别基础设置 在React中实现语音识别功能通常需要借助浏览器的Web Speech API或第三方库。Web Speech API提供了SpeechRecognition接口,允许应用程序直接访…

如何实现java序列化

如何实现java序列化

实现Java序列化的方法 1. 实现Serializable接口 要使一个类可序列化,需要让该类实现java.io.Serializable接口。这是一个标记接口,没有任何方法需要实现。 publi…