96SEO 2026-08-01 17:21 4
在学习JS时你是不是被prototype__proto__和原型链整的晕头转向?别急,这篇文章带你彻底吃透它们!
刚开始写JS时我总是不理解为什么要用原型。

从先看一个例子来看。假设我们想创建多个“人”的对象,每个人都有名字并能打招呼。初学者可能会这样写:
function Person {
this.name = name;this.sayHello = function {
console.log;},}
let p1 = new Person;说起来,let p2 = new Person;
这个写法存在严重的性能问题!
sayHello函数;prototype"构造函数和实例之间的桥梁"——这就是prototype!说起来,
"之前我总混淆prototype和__proto__,现在终于明白它们根本不是同一类东西了"
// 公共方法只需要定义一次!Person.prototype.sayHello = function {
console.log;},// 测试
const person1 = new Person;const person2 = new Person;console.log,// true!是同一个函数引用
console.log);// false,sayHello在原型上
console.log);// true
// 错误做法!Person.prototype = { sayHello {...} };说起来,// constructor指向Object了!// 应该这样:
Object.assign {...} });
__proto__ "原来所有对象都有一个'秘密通道'指向它的构造函数!" - 一位开发者感叹道
Object.getPrototypeOf === obj.__proto__ obj.constructor === obj.__proto__.constructor
class Dog {}
class Cat {}
const a=new Dog;a instanceof Dog // true
a instanceof Cat // false
// 本质上检查的是:
Dog.prototype.isPrototypeOf // true
Cat.prototype.isPrototypeOf // false
const obj={x:1};obj.y=2,Object.defineProperty;for{
if)continue;console.log,// x y
}
Object.getPrototypeOf===obj.__ proto __;// 获取真正继承来自父类而非自身定义过且不可枚举的属性列表: Object.getOwnPropertyNames.filter)
⚠️警告:
——————————————————————-
————⚠️禁止直接修改程序内置对象!—— ⚠️避免循环引用导致栈溢出!—— ⚠️谨慎覆盖toString/valueOf等特殊方法!其实,——————————————————————-
javascript
const arr=;
arr._ proto _={length:5};// 震惊,array length竟然变成5了?,console.log;//5,这绝不是你想要看到结果!
: 原型链查找过程示意图
### 原理详细说明🧠
| 属 性 名称 | 属 性所 在位置 | 作 用 |
|---|---|---|
| prototype | 函 数 本 身 | 提供给所有实例共享使用 |
| __ proto _ | 对 象 自 身 | 指向其构造器 |
| constructor | 原 型 对 象 上 | 指回其构造器本身 |
Q1:如何判断两个变量引用同一个对象?A:obj1===obj2||Object.is
Q2:如何清空一个对象但保留其prootype?A:for{delete obj;}或Object.keys.forEach;
Q3:为什么说null没有prorotype?A:因为null表示"无",没有任何隐含信息可言。
✅优先使用
✅将公共方法挂载至
✅使用
至于我们探讨。·]] ·]] ·]]
请继续关注后续精彩内容...
``javascript
// 基础案例演练:
function Grandfar{
this.familyName=王`;}
Grandfar.prototype.house=function{
return祖宅;},
function Far{
this.age=45;}
// 建立血缘关系:
Far.protoType=new Grandfar;Far.protoType.occupation=商人;
function Son{}
// 延续家族传统: Son.protoType=new Far;
// 新生代继承者诞生: const child=new Son;
// 验证DNA遗传方法:
child.familyName;// 王
child.age;// 45
child.house;// 祖宅
child.occupation;// 商人
运行方式分析: 当访问child.house时发生以下过程:
·
查找Son prototype → 没有house
· 接着追溯至Far prototype → 没有house
· 再继续延伸至Grandfar prototype → Bingo!找到了,
内部机制揭秘:
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌───────┐ ┌──┬──┐
│Grandfath├─▶│HouseMethod│ │Far├───▶│Son├───▶│{} │ │Null├──▶│ └──┴──│ er │ │ │ │ ├─────┘ └─────┘ └───▲───┘ └──▲──┘ └───▲ ├── ████ ███ ██ ██ ██ ├─────┴───┴───▲ ├── │ ↑ ↑ ↑ ↑ └─────────┴───┬───┴ ├── Grandparent Protype Farson Protype Farson Protype Object Protype Null Terminate Chain
markdown Click Here To See The Complete Process Of Property Search In Action!
作为专业的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