“我不是类,但我有 prototype;我没有 class,但我能继承——因为我是 JS 的猫。”
—— 罗小黑(一只用new Cat()诞生的黑猫)
💡 体现 OOP 核心思想:
封装:猫的状态(如名字)和行为(如叫)绑定在一起;
继承:子类 Kitten 可以重写 meow() 发出更嫩的声音;
多态:不同动物调用 .speak(),实际执行各自的方法(猫 meow,狗 bark)。
1. 今日学习内容总结:跟着罗小黑学 OOP 🐾
今天,我家主子 罗小黑 不再只是晒太阳,它决定开课讲 JavaScript 面向对象编程(OOP) !别被“面向对象”吓到——在 JS 世界里,它既不古典,也不刻板,而是一场关于对象如何“认祖归宗”的奇幻冒险。
🔑 四大核心要点,罗小黑亲自示范:
- JS 没有“真类”,只有“伪装者”
ES6 的class?不过是披着羊皮的构造函数!底层仍是 原型(prototype)+ 构造器(constructor) 的组合拳。new Cat()背后,是空对象、this绑定、原型链接的三重奏。 - 每个对象都有“家族谱”——原型链
当你问cat1.color,JS 会先查自身,没有就顺着__proto__往上找,直到Object.prototype。这就是委托式继承——不是“我拥有”,而是“我能借”。 - 继承 ≠ 复制,而是“认爹”
想让Garfield(加菲猫)继承Cat?不能直接抄属性!要用Object.create(Cat.prototype)让它“认 Cat 为父”,否则一改全改,乱了家谱! - 封装 = 私有 + 公共,各司其职
名字、颜色放构造函数(每只猫独一份),meow()方法(喵~)放prototype(全家共享)。内存省了,结构清了,主子满意了 😼
🎯 实战案例:打造“猫宇宙”组件系统
想象你在开发一个宠物社交 App:
Cat是基类,定义通用属性(name, color)和方法(meow)LazyCat继承Cat,新增nap()行为TechCat再继承LazyCat,还能codeInSleep()
所有猫共用一套行为模板,但各自状态独立——这正是 原型式 OOP 在前端工程中的高光时刻!
2. 面试官视角:罗小黑出的三道“猫考题” 🧠
“想抱我回家?先过我这三关!” —— 罗小黑甩尾巴
🐾 初级题(基础理解)
Q1:有人说 JS 的 class 和 Java 一样,是真正的类,你怎么看?
✅ 考察点:是否穿透语法糖,看清 JS 原型本质。
💡 期待回答:指出 class 只是构造函数+原型的语法封装,无静态类型、无访问控制,继承靠原型链而非类复制。
🐾 中级题(应用分析)
Q2:如果我写 Dog.prototype = Animal.prototype 来实现继承,会发生什么?怎么修?
✅ 考察点:对引用共享、原型污染的敏感度。
💡 期待方向:识别父子原型被绑成“连体婴”,正确方案是 Object.create(Animal.prototype) + 修复 constructor。
🐾 高级题(开放思辨)
Q3:现在都用 React 函数组件了,OOP 还有用吗?
✅ 考察点:技术演进判断力 + 架构思维。
💡 期待洞察:承认函数式主流,但强调 OOP 在状态机、实体建模、工具库封装中的不可替代性——范式服务于问题,而非潮流。
3. 求职者视角:高质量回答,让面试官想“吸猫” 🎤
✅ Q1 回答(自信+精准)
“JS 的
class更像‘OOP cosplay’——它让熟悉 Java/C# 的开发者感到亲切,但底层仍是原型机制。比如static方法实际挂载在构造函数上,实例方法存于prototype。没有编译期检查,没有 private 字段(直到最近才有 #私有语法),一切在运行时动态决议。所以,JS 是基于对象的语言,而非基于类的语言。”
✅ Q2 回答(逻辑+细节)
“这样做会让
Dog和Animal共享同一个原型对象。一旦给Dog.prototype加方法(如bark()),Animal实例也能调用,造成语义混乱。
正确做法是:
> Dog.prototype = Object.create(Animal.prototype);
> Dog.prototype.constructor = Dog;
这样
Dog原型以Animal.prototype为父,形成干净的继承链,且constructor指向正确——这才是 JS 继承的‘正统礼仪’。”
✅ Q3 回答(格局+落地)
“函数式组件确实主导 UI 层,但 OOP 并未退场,而是退居幕后,支撑复杂逻辑。
举个例子:我在上个项目中用类封装 WebSocket 连接——
WebSocketClient类管理连接状态、重连策略、消息队列,外部只需调用send()。这种高内聚、低耦合的设计,用纯函数反而更难维护。
所以,不是 OOP 过时了,而是我们学会了在合适的地方用合适的范式——这,才是成熟工程师的标志。”
🌟 结语:你的代码,也可以有“猫格”
罗小黑不会写代码,但它教会我:对象不必完美,但要有自己的“原型”;继承不必血缘,但要清晰可溯。
在 AI 编程、Vibe Coding 盛行的今天,理解 OOP 底层逻辑,能让你在 prompt 工程之外,依然保有架构判断力与技术话语权。
下次面试,别只背八股文——
讲一个“猫的故事”,让面试官记住你。 🐈⬛
👉 关注我,下期带你看 “加菲猫如何用组合模式吃千层面” !