>[danger]原生JS 类的实现方法,比如new一个函数的过程 在 JavaScript 中,我们可以使用函数来模拟类的概念,并使用 `new` 运算符来创建类的实例。下面是一个简单实现原生 JS 类的例子: ```javascript // 定义一个 Person 类 function Person(name) { // 构造函数中定义实例属性 this.name = name; } // 定义 Person 类的原型方法 Person.prototype.sayHello = function() { console.log('Hello, I am ' + this.name); } // 创建一个 Person 实例 var person = new Person('John'); person.sayHello(); ``` 上述代码中,我们使用了函数 `Person()` 来定义一个类,并在其内部使用 `this` 关键字定义了一个实例属性 `name`。同时,我们还在 `Person.prototype` 对象上定义了类的原型方法 `sayHello()`。 >[info]使用 `new` 运算符创建类的实例时,会做以下几件事情: 1. 创建一个空对象; 2. 将空对象的原型指向构造函数的 prototype 属性; 3. 调用构造函数,并将空对象作为构造函数的上下文(即 `this`); 4. 如果构造函数有返回值,并且返回值是一个对象,则返回该对象;否则返回创建的空对象。 因此,在上述代码中,我们使用 `new` 运算符创建 `Person` 实例时,实际上就是创建了一个空对象,并将其原型指向 `Person.prototype`,然后调用了 `Person()` 构造函数,并将该空对象作为构造函数的上下文,最终返回了这个空对象。此时,我们就可以通过实例访问该类的实例属性和原型方法了。 以上就是用原生 JavaScript 实现类的简单例子和 `new` 运算符的执行过程。