当前位置:首页 > JavaScript

js实现mvc

2026-03-15 05:24:59JavaScript

MVC 模式简介

MVC(Model-View-Controller)是一种软件架构模式,将应用程序分为三个核心组件:模型(Model)处理数据和业务逻辑,视图(View)负责展示数据,控制器(Controller)处理用户输入并协调模型和视图。

实现 MVC 的步骤

模型(Model) 模型负责管理数据和处理业务逻辑。可以创建一个独立的类或对象来封装数据操作。

class Model {
  constructor(data = {}) {
    this.data = data;
  }

  setData(key, value) {
    this.data[key] = value;
    this.notifyChange();
  }

  getData(key) {
    return this.data[key];
  }

  notifyChange() {
    // 通知视图更新
    if (this.onChange) {
      this.onChange(this.data);
    }
  }
}

视图(View) 视图负责渲染数据到用户界面,通常是 DOM 操作。

class View {
  constructor(elementId) {
    this.element = document.getElementById(elementId);
  }

  render(data) {
    this.element.innerHTML = `
      <div>Name: ${data.name}</div>
      <div>Age: ${data.age}</div>
    `;
  }
}

控制器(Controller) 控制器负责处理用户输入,更新模型并通知视图。

class Controller {
  constructor(model, view) {
    this.model = model;
    this.view = view;

    // 绑定模型变更时的回调
    this.model.onChange = (data) => this.view.render(data);
  }

  handleInputChange(key, value) {
    this.model.setData(key, value);
  }
}

完整示例

以下是一个简单的 MVC 实现示例,模拟用户输入更新视图:

js实现mvc

// 初始化模型、视图和控制器
const model = new Model({ name: "John", age: 25 });
const view = new View("app");
const controller = new Controller(model, view);

// 首次渲染
view.render(model.data);

// 模拟用户输入更新数据
setTimeout(() => {
  controller.handleInputChange("name", "Alice");
}, 2000);

setTimeout(() => {
  controller.handleInputChange("age", 30);
}, 4000);

关键点

  • 数据绑定:模型通过回调(如 onChange)通知视图更新。
  • 职责分离:模型不直接操作视图,控制器负责协调。
  • 扩展性:可以轻松添加新功能(如多个视图监听同一模型)。

进阶优化

  • 使用观察者模式(Observer)实现更灵活的数据绑定。
  • 结合框架(如 React、Vue)实现更高效的视图更新。
  • 引入路由(Router)处理多页面场景。

标签: jsmvc
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现继承

js实现继承

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

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

jquery js

jquery js

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

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…