96SEO 2026-06-04 16:27 3
嗨,朋友们!今天咱们聊聊 JavaScript 的原型链继承。别担心,代码不多,讲得通俗易懂。先别急着读完就走,我保证你会收获不少。
啥是原型链?在 JS 里每个对象dou有一个内部槽叫 ]。它指向另一个对象,也叫“原型”。把它想象成一条链,顶端是 null。当你访问对象的属性时Ru果没找到,就沿着这条链往上找。

举个例子:
const person = {
name: '小明'
};
console.log; // Object.prototype
这就是人家默认给你的原型。
构造函数和 new 的魔法构造函数其实就是普通函数,只是首字母大写。用 new 调用时会自动:
Create 一个新对象。
把新对象的 ] 指向构造函数的 .prototype
执行函数体,把 this 指向新对象。
If 函数没有显式返回值,则返回这个新对象。
比如:
function Animal {
this.name = name;
}
const dog = new Animal;
console.log; // 旺财
console.log === Animal.prototype); // true
那为什么要用 prototype?
因为Ru果每个实例dou自己拥有方法,那内存会被浪费。把公共方法挂到 .prototype 就Neng共享了。
这是Zui干净的方法。把子类的 prototype 指向父类的实例:
function Person {
this.name = name;
}
Person.prototype.sayHi = function {
console.log;
};
function Student {
Person.call;
}
Student.prototype = Object.create;
Student.prototype.constructor = Student;
Student.prototype.study = function {
console.log;
};
const s = new Student;
s.sayHi; // 嗨,我叫学号1234
s.study; // 学号1234 正在学习
2️⃣ 用 Object.setPrototypeOf
Ke以直接修改Yi有对象的 ]:
function Car { this.make = make; }
Car.prototype.drive = function { console.log; };
function SportsCar {
Car.call;
this.model = model;
}
Object.setPrototypeOf;
SportsCar.prototype.race = function { console.log; };
const sc = new SportsCar;
sc.drive; // 开车
sc.race; // 飙车
3️⃣ 用父类实例来Zuo桥梁
Ru果你想让子类既Neng共享方法,又Neng有自己的属性,Ke以这么写:
function Parent {
this.name = name;
}
Parent.prototype.greet = function { console.log; };
function Child {
Parent.call;
this.age = age;
}
Child.prototype = new Parent; // 注意:这里会调用一次 Parent 构造函数
Child.prototype.constructor = Child;
Child.prototype.showAge = function { console.log; };
const c1 = new Child;
c1.greet; // 你好,我是阿姨
c1.showAge; // 年龄30
注意:这种方式会多创建一次父实例,Ru果父构造有副作用,请谨慎使用。
常见坑点与小技巧 constructor 链接不对怎么办?Ru果直接赋值 `
Child.prototype.constructor = Child;
或者geng安全地使用 Object.create。
静态属性怎么继承?
class Shape {
static color='red';
}
class Circle extends Shape {}
console.log; // red
说实话 静态属性不是通过 prototype 链传递,而是通过 constructor 本身。
性Neng小结 & 推荐实践
Object.create Zui快,因为只创建一个空对象,再指向父 prototype,无需执行父构造函数。
Object.setPrototypeOf 性Neng稍差,但代码geng直观,可用于动态改造Yi有实例。
寄生组合式继承适合需要在子类中混入大量实例属性且不想调用父构造时使用,但要注意多余一次构造成本。
不要随便改 proto,它Yi被视为遗留特性;优先用标准 API Object.getPrototypeOf / setPrototypeOf。
若想让所有实例共享同一方法,永远挂到 .prototype 上;Ru果每个实例需要独立数据,放到构造器内部即可。
记住 null 是原型链终点;不要让你的自定义原型指向 null 除非你确实想断开链接,否则会导致任何属性查找dou失败。
面试题通常考的是 “为什么不直接复制父层方法”,所以要清楚 prototype 与 constructor 的区别及其影响。
"JS 的继承不是靠类,而是靠原型。"——这句一句话就抓住了核心。掌握三种常见实现方式后你就Ke以灵活地选择Zui适合场景的方法啦!Ru果你还想深入,Ke以尝试自己
, 或者了解 ES6 Class 的内部实现细节。希望今天的分享对你有帮助!咱们下次再聊别的技术吧~祝编码愉快 🚀💻🎉
附言Ru果觉得文章太长或者有点乱,那正好练习一下自己的阅读速率和信息整理Neng力啊!哈哈~
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback