JS模拟的new运算符工作原理(new运算符的伪码实现)
时间: 2024-03-09 12:49:39 浏览: 52
当我们使用 `new` 运算符创建一个对象时,实际上发生了以下几个步骤:
1. 创建一个新对象;
2. 将这个新对象的原型(`__proto__`)指向构造函数(`constructor`)的原型对象(`prototype`);
3. 将构造函数(`constructor`)的`this`指向这个新对象;
4. 执行构造函数(`constructor`)中的代码;
5. 返回这个新对象。
下面是一个 `new` 运算符的伪码实现:
```javascript
function myNew(constructor, ...args) {
// 1. 创建一个新对象
const obj = {};
// 2. 将新对象的原型指向构造函数的原型对象
obj.__proto__ = constructor.prototype;
// 3. 将构造函数的 this 指向新对象
const result = constructor.apply(obj, args);
// 4. 如果构造函数返回的是一个对象,则返回这个对象;否则返回新对象
return typeof result === 'object' ? result : obj;
}
```
使用这个 `myNew` 函数可以模拟 `new` 运算符的行为,例如:
```javascript
function Person(name, age) {
this.name = name;
this.age = age;
}
const person = myNew(Person, 'John', 30);
console.log(person); // { name: 'John', age: 30 }
console.log(person instanceof Person); // true
```
阅读全文