JS对象编译原理和construct __proto__ prototype的理解

function a(){}

var b=new a();

匿名函数的实例化原理

var b={};

b.__proto__=a.prototype;

a.call(b);

1.引用类型的实例对象的原型是堆空间的声明函数

2.引用类型的对象没有prototype属性,只有__proto__属性

3.引用类型的对象的__proto__属性指向声明函数的prototype属性

object类型

1.object本身是一个对象,object对象的原型是{}

因为object对象的__proto__原型指针指向function这个声明函数的prototype

2.object对象是匿名function的实例

由于object对象是function的实例,所以一切function的实例都属于object类型

3.object对象的所有js对象的始祖对象,所有js对象的原型指针最终指向object对象

4.object对象的原型为null,null是原型链的起点

Object函数

Object函数不是object对象,object对象是由object函数创建

Object函数的原型为function

construct构造属性

构造属性存储着这个对象所对应的函数的引用

由于JS对象是通过call调用并执行堆的声明函数实现的JS对象

所以JS对象的construct存储着这个JS对象所调用的函数的函数引用

结合现实生活的理解

堆空间的声明函数只是一张设计图,这个设计图只有被new或者被调用后才会创建一个模板让模板去实现设计图的方法和属性并让创建的这个模板实体被调用到栈去执行

猜你喜欢

转载自blog.csdn.net/qq_38603437/article/details/92251038