前端-JavaScript-函数内存分析
函数是一种特殊的对象,它是引用数据类型/复杂数据类型,存储在堆中,对函数的引用(指针)存储在栈中。一个函数有两块内存,一块表示函数本身,另外一块表示原型。
如图,
栈中存放类和对象的引用/指针;
B01中存放静态方法/类方法,可以通过类名调用;
B02中存放非静态方法/实例方法,通过对象调用;
B03为实例obj的实际地址,其中有_proto_方法。
把构造函数想象成母亲,其中的prototype用于指示自己的丈夫是原型对象;
把原型对象想象成父亲,其中的constructor用于指示自己的妻子是构造函数;
把实例想象成儿子,是因为他是类Obj的实例,图中可以增加一个B03指向B02的箭头,用于形容儿子只能调用老爸的方法(老爸有多强,儿子就有多强),而不能调用妈妈的方法。
总结,构造函数可以实例化对象,并且为对象提供的公共的方法,对象可以调用其构造函数原型中的方法。