核心是将共享方法移至原型而非构造函数,避免重复创建函数对象以节省内存并提升初始化速度;实例属性须保留在this上,原型仅存共用方法和只读配置;禁用in操作符和运行时修改原型,推荐object.freeze优化。

核心是把共享方法移出构造函数,统一挂到原型上。这样每个实例不再各自保存一份函数副本,内存和初始化速度都能明显提升。
把方法定义在 prototype 上,别写在构造函数里
每次 new 都在构造函数内声明函数,等于为每个对象新建一个函数对象——10 万个实例就多占几 MB 内存,还拖慢创建过程。
- ❌ 错误:在构造函数里定义方法
- ✅ 正确:统一写在 Constructor.prototype.methodName 上
- 所有实例通过原型链访问同一份方法,真正复用
保持实例属性为自有属性,别往原型上塞数据
像 x、y、id 这类每个对象都不同的值,必须放在 this 上;原型只放函数和真正共用的只读配置(比如 species = "人类")。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 用 Object.hasOwn(instance, 'prop') 快速判断某个属性是不是实例自己有的
- 避免用 in 操作符,它会遍历整个原型链,效率低
别在运行时动态改原型
V8 引擎看到原型被修改(比如 MyClass.prototype.newFn = ...),会立刻让已创建的实例“失优化”,执行变慢。
- 所有原型方法应在类定义完成时一次性写完
- 高频逻辑(如动画帧、事件回调)里绝对不要增删原型方法
- 需要条件分支?封装进已有方法里,而不是加新方法
配合 freeze 和轻量构造函数
对确定不会变的原型,可以调用 Object.freeze(Constructor.prototype),告诉引擎放心做 JIT 优化。
- 构造函数本身尽量只做属性赋值,不跑计算、不发请求、不设定时器
- 重逻辑拆到原型方法或独立服务模块里
- 参数建议用对象解构传入,更易扩展且语义清晰










