将方法绑定到构造函数的 prototype 上可让所有实例共享同一函数,避免重复创建浪费内存;若在构造函数内定义方法(如 this.sayHello = function(){}),每个实例都会生成独立副本,100 个实例就占用 100 份相同逻辑的内存。

把方法绑定到构造函数的 prototype 上,就能让所有实例共享同一个函数,避免重复创建、节省内存。
为什么直接在构造函数里定义方法会浪费内存
每次用 new 创建实例时,如果方法写在构造函数内部(比如 this.sayHello = function() {...}),每个实例都会生成一份独立的函数副本。100 个实例,就占 100 份内存——函数逻辑完全一样,纯属冗余。
- 方法属于“行为”,通常不随实例变化,理应复用
- 只有属性(如
name、age)才需要每个实例各自保存
正确做法:方法统一挂到 prototype 上
构造函数自带一个 prototype 属性,它是一个对象,所有通过该构造函数创建的实例,都能通过原型链访问其中的方法。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 写法示例:
Person.prototype.sayHello = function() { ... }; - 这样定义后,
person1.sayHello和person2.sayHello实际指向同一个函数引用 -
console.log(person1.sayHello === person2.sayHello)返回true
原型链查找机制保障可用性
当调用 person1.sayHello() 时,JS 引擎按顺序查找:
- 先看
person1自身有没有sayHello属性 → 没有 - 再查
person1.__proto__(即Person.prototype)→ 找到了 - 立即执行,无需复制
这个过程对开发者透明,但正是它支撑了方法复用的基础。
小提醒:别漏掉 constructor 指回原函数
手动设置 prototype 时(比如重写整个 prototype 对象),记得补上 constructor 属性,否则实例的 constructor 会指向 Object:
- 错误写法:
Person.prototype = { sayHello() {...} }; - 正确写法:
Person.prototype = { constructor: Person, sayHello() {...} };或更稳妥地用Object.defineProperty设置不可枚举的constructor

















