发表于: 2020-03-28 21:36:07
0 1842
今天完成的事情:
明天计划的事情:
遇到的问题:
收获:
对象的原型是:__proto__
函数的原型是:prototype
使用new命令时,它后面的函数依次执行下面的步骤。
- 创建一个空对象,作为将要返回的对象实例。
- 将这个空对象的原型,指向构造函数的
prototype
属性。: - 将这个对象的__proto__指向构造函数的prototype属性或者说使__proto__的键值等于构造函数的prototype属性的键值又或者说2者指向同一个堆内存里的地址
- 将这个空对象赋值给函数内部的
this
关键字。 - 或者说使this指向的对象变为这个空对象:简单来说进行了一次赋值
- 开始执行构造函数内部的代码。
输出这个实例对象;
这个从堆栈内存的角度解释很简单;
https://www.bilibili.com/video/BV1Kt411w7MP?p=29
问:原型链怎么形成?
答:每个对象都有一个内部链接到另一个对象, 称为它的原型 prototype。该原型对象有自己的原型,等等,直到达到一个以null为原型的对象。 根据定义,null没有原型,并且作为这个原型链prototype chain中的最终链接。
问:constructor 是什么?
答:构造函数的prototype 属性指向原型对象,原型对象也生成一个对应的constructor属性指向构造函数。所以constructor用来执行对应的 构造函数。
JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__的内置属性,用于指向创建它的函数对象的原型对象prototype,我们把这个有__proto__串起来的直到Object.prototype.__proto__为null的链叫做原型链
评论