欢迎光临
我们一直在努力

用栈模拟队列搞不懂?7分钟吃透JS原型式面向对象实现

一、开篇痛点:为啥你学不会栈模拟队列?

你是不是也遇到过这些问题:

  • 背完栈(FILO)和队列(FIFO)的概念,一动手写代码就懵
  • 学JS面向对象时,分不清class、构造函数、prototype的关系
  • 照着教程写栈模拟队列的代码,却看不懂背后的原型逻辑

在这里插入图片描述

这篇文章不讲虚的,7分钟带你从0实现“栈模拟队列”,同时吃透JS原型式面向对象的核心逻辑,代码可直接复制运行,看完就能落地。

二、先搞懂核心概念:栈、队列、JS面向对象

2.1 栈 vs 队列(一句话分清)

  • 栈(stack):后进先出(FILO),像往桶里放书,最后放的先拿
  • 队列(queue):先进先出(FIFO),像排队买奶茶,先来的先买

队列需要实现的核心方法:

  • push(x):把元素放到队列尾部
  • pop():移除队列头部元素
  • peek():返回队列头部元素
  • empty():判断队列是否为空

2.2 JS的“另类”面向对象:没有class也能玩

很多人以为JS必须用class才能写面向对象,其实错了! JS的设计哲学是:一切皆对象,没有类,靠「构造函数 + 原型(prototype)」就能实现面向对象,而且更灵活。

核心知识点(划重点):

  • 普通函数调用:this指向全局对象(浏览器里是window)
  • new + 构造函数调用:this指向新创建的实例对象
  • 原型对象(prototype):存放实例共享的方法,所有实例都能访问
  • 原型链:实例先查自身属性,没有就沿原型链找,直到Object顶层(终点是null)
  • 三、实战:用栈模拟队列(完整可运行代码)

    3.1 核心思路

    用两个栈(stack1、stack2)模拟队列:

    • stack1:负责接收新增元素(对应队列push)
    • stack2:负责弹出/查看头部元素(对应队列pop/peek)
    • 核心逻辑:stack2为空时,把stack1的元素倒序放入stack2,实现“先进先出”

    3.2 完整代码

    // 构造函数:创建队列实例(核心是两个栈)
    const MyQueue = function () {


    // 实例私有属性:两个栈
    this.stack1 = [];
    this.stack2 = [];
    };

    // 原型方法:push – 元素入队(放栈1尾部)
    MyQueue.prototype.push = function (x) {


    this.stack1.push(x);
    console.log(`元素 ${

    x} 已入队`);
    };

    赞(0)
    未经允许不得转载:171主机测评 » 用栈模拟队列搞不懂?7分钟吃透JS原型式面向对象实现
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址