一、开篇痛点:为啥你学不会栈模拟队列?
你是不是也遇到过这些问题:
- 背完栈(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)」就能实现面向对象,而且更灵活。
核心知识点(划重点):
三、实战:用栈模拟队列(完整可运行代码)
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} 已入队`);
};


