JS中new的运行方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS中new的运行方式相关的知识,希望对你有一定的参考价值。

在JS中,有两个基础原型,分别是Function.prototype和Object.prototype。这两个原型组成了JS中的所有实例他们的关系是 Function.prototype ----> Object.prototype ----> null。

常用的创建类的有两种方法,我们从这两种方法讲两种prototype的关系。

第一种是先有一个原型,直接令新的对象的__proto__指向已经有的原型。这种时候可以类比继承关系,但区别是把那个原型的状态(如属性的取值等)也一并继承过来了。

但是记住这个时候新的对象从原型继承的值如果没有被初始化/赋值,原型中的值改变的话,新的对象中的对应值也会改变。

第二种是使用new来继承,new在JS里这样运行:

1.创建一个最基础的Object对象(内容为空 )并且初始化。

2.把后面的构造函数放进刚创建的obj中,并且设置__proto__为函数的对象。

3.使用创建出的对象作为obj,在obj中执行那个函数,,当然那个函数要对刚创建的这个对象进行初始化,然后返回。

4.如果返回的是Object对象,new就返回这个对象,否则返回刚创建的obj。

这里解释一下函数的原型类型:

比如说有 

function A(){ var a = 1;};

那么A是一个Object,他的constructor就是A(),平时调用A()就相当于调用A这个Object的构造函数。

 

PS:prototype属性是该对象作为proto的时候的类型。__proto__是指向本对象的原型对象的指针。

 

 

 

技术分享

 

以上是关于JS中new的运行方式的主要内容,如果未能解决你的问题,请参考以下文章

Pycharm中配置项目的打开方式(This Window,New Window)

js 的new date()问题,求救啊,急啊

(js)使用new对函数进行构造调用

几种自己主动运行js代码的方式

VUE中如何动态编译js

以编程方式在 Google Colab 中运行所有单元格命令