当前位置:首页 > 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();

对象字面量与工厂模式

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

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

工厂函数模式:

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

私有成员实现

通过闭包或 ES2022 私有字段:

// 闭包方式
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 控制对象属性:

JS如何实现面向对象

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

分享给朋友:

相关文章

vue如何实现刷新

vue如何实现刷新

实现页面刷新的方法 在Vue中实现刷新功能可以通过以下几种方式实现: 使用location.reload() 直接调用浏览器的原生方法强制刷新整个页面: methods: { refreshP…

vue如何实现标签

vue如何实现标签

实现动态标签页 在Vue中可以通过<component :is="currentTab">动态切换组件,结合v-for渲染标签页头部。典型结构包含标签页容器和内容区域: <temp…

vue如何实现同步

vue如何实现同步

Vue 同步实现方法 在 Vue 中实现同步操作通常涉及处理异步任务(如 API 调用、定时器等)的同步化。以下是几种常见方法: 使用 async/await 通过 async/await 语法可以…

vue如何实现发票

vue如何实现发票

在Vue中实现发票功能通常需要结合前端展示、数据绑定和打印功能。以下是实现发票功能的关键步骤和代码示例: 发票模板设计 使用Vue的模板语法设计发票的HTML结构,结合CSS美化样式。发票模板通常包…

vue如何实现定位

vue如何实现定位

Vue 实现定位的方法 在 Vue 中实现定位通常涉及 CSS 的定位属性(如 position: fixed、position: absolute 等)或结合浏览器 API(如 Geolocatio…

vue如何实现tabbar

vue如何实现tabbar

实现 TabBar 的基本结构 在 Vue 中实现 TabBar 通常需要创建一个包含多个选项卡的组件,每个选项卡对应不同的内容或路由。可以使用 v-for 动态生成选项卡,并通过 v-model 或…