返回
new 的作用及手写 new
前端
2023-09-17 10:27:25
new 的作用
在 JavaScript 中,new 运算符用于创建对象的实例。它通过调用一个函数并在该函数内部使用this
来创建对象。
const person = new Person();
上面的代码创建一个Person
类的实例。当new Person()
被调用时,Person
函数被执行,并且this
关键字指向一个新的对象。该对象将成为person
变量的值。
new 的返回值
new 运算符的返回值取决于所调用的函数。如果构造函数返回非空对象,则返回该对象;否则,返回刚创建的新对象。
function Person() {
// 返回一个对象
return {
name: "John Doe",
age: 30
};
}
const person = new Person();
console.log(person);
// 输出:{name: "John Doe", age: 30}
function Person() {
// 没有返回对象
}
const person = new Person();
console.log(person);
// 输出:Person {}
手写 new
我们可以通过以下步骤手写 new 运算符:
- 创建一个新对象。
- 将构造函数的
prototype
属性赋给新对象的__proto__
属性。 - 将构造函数的
this
关键字指向新对象。 - 执行构造函数。
- 返回新对象。
function new(constructor, ...args) {
// 创建一个新对象
const obj = {};
// 将构造函数的prototype属性赋给新对象的__proto__属性
obj.__proto__ = constructor.prototype;
// 将构造函数的this关键字指向新对象
const boundFn = constructor.bind(obj);
// 执行构造函数
boundFn(...args);
// 返回新对象
return obj;
}
使用上述手写 new 函数,我们可以创建一个Person
类的实例:
function Person(name, age) {
this.name = name;
this.age = age;
}
const person = new Person("John Doe", 30);
console.log(person);
// 输出:Person {name: "John Doe", age: 30}
总结
new 运算符在 JavaScript 中用于创建对象的实例。它通过调用一个函数并在该函数内部使用this
关键字来创建对象。new 运算符的返回值取决于所调用的函数。如果构造函数返回非空对象,则返回该对象;否则,返回刚创建的新对象。我们可以通过以下步骤手写 new 运算符:创建新对象,将构造函数的 prototype 属性赋给新对象的 proto 属性,将构造函数的 this 关键字指向新对象,执行构造函数,返回新对象。