类字段、绑定方法与非绑定方法的内存分配差异疑问
类方法的内存分配对比
基础前提
类字段(箭头函数形式)定义在实例而非原型上,每次创建实例都会生成新的函数引用并分配新闭包,相比普通非绑定方法会占用更多内存。
各类方法的内存表现
1. 非绑定方法(unboundMethod)
这类方法挂载在类的原型上,所有实例共享同一个函数引用,不会为每个实例单独分配内存,是三者中内存占用最低的。
2. 箭头函数类字段(classField)
每个实例创建时,都会生成一个全新的箭头函数实例,同时由于闭包会捕获当前实例的上下文,每个实例都持有独立的函数引用和闭包,内存占用较高。
3. 绑定方法(boundMethod)
在构造函数里通过bind(this)生成的绑定方法,本质是每次实例化都会创建一个新的绑定函数对象。这个绑定函数会保留对原型上原方法的引用,同时固定了当前实例的this上下文。
它的内存占用和箭头函数类字段基本处于同一量级——因为两者都是为每个实例单独创建新的函数对象,都会占用实例级别的额外内存。唯一的细微差异可能来自闭包捕获的具体内容,但从整体内存开销来看,二者没有显著区别。
总结
- 非绑定方法:原型共享,内存占用最低
- 箭头函数类字段:实例独有,内存占用高
- 绑定方法:实例独有,内存占用与箭头函数类字段接近
内容的提问来源于stack exchange,提问作者gacat
相关产品推荐
相关产品推荐

