js中new操作符工作原理
原创
JS中new操作符的工作原理
在JavaScript中,new操作符是用来创建对象的关键字。当我们使用new操作符调用一个函数(构造函数)时,背后出现的事情远比看上去错综得多。下面将详细介绍new操作符的工作原理。
1. 创建一个新对象
使用new操作符时,首先会在内存中创建一个新的空对象。
2. 设置原型链
将新对象的原型([[Prototype]])设置为构造函数的prototype属性。
3. 绑定this
将新创建的对象作为this的上下文绑定到构造函数并调用该函数。
4. 返回对象
如果构造函数返回了一个对象,那么这个对象会被返回;如果返回的是一个原始值,那么步骤1创建的对象将被返回。
手动实现一个new操作符
下面是一个实现new操作符功能的函数示例:
function myNew(constructorFunc, ...args) {
// 1. 创建一个新对象
const obj = {};
// 2. 设置原型链
Object.setPrototypeOf(obj, constructorFunc.prototype);
// 3. 绑定this并调用构造函数
const result = constructorFunc.apply(obj, args);
// 4. 返回对象
return (typeof result === 'object' && result !== null) ? result : obj;
}
// 使用示例
function Person(name, age) {
this.name = name;
this.age = age;
}
const person = myNew(Person, '张三', 25);
console.log(person.name); // 输出:张三
console.log(person.age); // 输出:25