当前位置:首页 > JavaScript

JS如何实现面向对象

2026-03-01 08:54:50JavaScript

基于原型的面向对象实现

JavaScript 通过原型链实现面向对象编程。每个对象都有一个隐藏的 [[Prototype]] 属性(可通过 __proto__Object.getPrototypeOf() 访问),用于继承属性和方法。

构造函数模式:

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

Person.prototype.sayHello = function() {
  console.log(`Hello, I'm ${this.name}`);
};

const person = new Person('Alice');
person.sayHello();

ES6 class 语法糖

ES6 引入的 class 语法更接近传统面向对象语言:

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

  speak() {
    console.log(`${this.name} makes a noise`);
  }
}

class Dog extends Animal {
  speak() {
    super.speak();
    console.log(`${this.name} barks`);
  }
}

const dog = new Dog('Rex');
dog.speak();

对象字面量与工厂模式

对于简单对象可以直接使用字面量:

JS如何实现面向对象

const car = {
  brand: 'Toyota',
  drive() {
    console.log(`Driving ${this.brand}`);
  }
};

工厂函数模式:

function createUser(name) {
  return {
    name,
    greet() {
      console.log(`Hi, ${this.name}`);
    }
  };
}

私有成员实现

通过闭包或 ES2022 私有字段:

JS如何实现面向对象

// 闭包方式
function Counter() {
  let count = 0;
  this.increment = function() {
    return ++count;
  };
}

// ES2022 私有字段
class Wallet {
  #balance = 0;
  deposit(amount) {
    this.#balance += amount;
  }
}

混入模式(Mixin)

实现多重继承的方式:

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

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

function Person() {}
Object.assign(Person.prototype, canEat, canWalk);

静态方法与属性

使用 static 关键字定义:

class MathUtils {
  static PI = 3.14159;
  static square(x) {
    return x * x;
  }
}
console.log(MathUtils.square(5));

属性描述符

通过 Object.defineProperty 控制对象属性:

const obj = {};
Object.defineProperty(obj, 'readOnly', {
  value: 42,
  writable: false,
  enumerable: true
});

分享给朋友:

相关文章

权限管理vue如何实现

权限管理vue如何实现

基于路由的权限控制 在Vue中可以通过路由守卫实现页面级权限控制。定义路由时添加meta字段标记权限角色: const routes = [ { path: '/admin',…

jquery对象

jquery对象

jQuery 对象简介 jQuery 对象是通过 jQuery 选择器或方法创建的封装了 DOM 元素集合的对象。它提供了一系列便捷的方法来操作 DOM、处理事件、实现动画等。与原生 DOM 对象不同…

vue如何实现单选

vue如何实现单选

使用原生 HTML 单选按钮 在 Vue 中可以直接使用 HTML 的原生单选按钮,通过 v-model 绑定数据。 <template> <div> &l…

java如何实现跨平台

java如何实现跨平台

Java实现跨平台的原理 Java通过“一次编写,到处运行”的设计理念实现跨平台能力。其核心机制包括: Java虚拟机(JVM) Java源代码编译为字节码(.class文件),由JVM解释执行。…

vue如何实现递归

vue如何实现递归

递归组件的实现方法 在Vue中实现递归组件通常用于渲染树形结构或嵌套数据。核心思路是组件在其模板中调用自身,但需注意终止条件以避免无限循环。 定义递归组件 组件需设置name选项,才能在模板中调用…

vue如何实现select

vue如何实现select

Vue 实现 Select 组件的方法 在 Vue 中实现 Select 组件可以通过原生 HTML <select> 元素或使用第三方 UI 库(如 Element UI、Ant Des…