es5 和 es6 使用 new 关键字实例化对象的流程是一样的吗?

ES5 和 ES6 使用 new 关键字实例化对象的流程基本上是一样的,只是在细节上存在一些差异。

在 ES5 中,当使用 new 关键字调用一个函数时,会创建一个新的对象,并将这个新对象的 [[Prototype]] 属性指向构造函数的 prototype 属性。此外,new 关键字还会将构造函数内部的 this 关键字绑定到新创建的对象上,从而允许我们在构造函数内部添加属性和方法。

在 ES6 中,这些基本的流程也是相同的。但是,ES6 引入了类(class)的概念,从而为面向对象编程提供了更加便利的语法。使用类定义一个对象时,需要使用 constructor 方法作为构造函数,而不是普通的函数。类定义的语法糖实际上是对函数的封装,使用 new 关键字创建类的实例时,实际上也是在调用类的 constructor 方法。

在 ES6 中,可以使用类的继承来创建更复杂的对象。当使用 new 关键字创建一个继承自另一个类的类的实例时,会先调用父类的 constructor 方法,再调用子类的 constructor 方法,从而完成对象实例的创建过程。

需要注意的是,虽然 ES6 的类看起来像是其他面向对象语言中的类,但在 JavaScript 中,类仍然是基于原型继承的。在创建一个类的实例时,实际上是在创建一个新对象,并将这个新对象的原型指向类的原型。因此,实例化对象的流程与使用普通函数或类定义的对象的流程基本上是相同的。