前端面试要求手写new
时间: 2023-10-29 09:04:49 浏览: 107
在前端面试中,有时会要求候选人手写实现 `new` 关键字的功能。这是一个常见的面试题,考察面试者对 JavaScript 语言的理解以及原型链的知识。
下面是一个简单的手写 `new` 的实现示例:
```javascript
function myNew(constructor, ...args) {
// 创建一个新的空对象
const obj = {};
// 将新对象的原型指向构造函数的原型
Object.setPrototypeOf(obj, constructor.prototype);
// 调用构造函数,并将 this 绑定到新对象上
const result = constructor.apply(obj, args);
// 如果构造函数返回的是对象,则返回该对象
if (typeof result === 'object' && result !== null) {
return result;
}
// 否则,返回新对象
return obj;
}
```
使用示例:
```javascript
function Person(name) {
this.name = name;
}
const person = myNew(Person, 'John');
console.log(person.name); // 输出 "John"
```
请注意,这只是一个简单的实现示例,对于一些复杂的情况(如构造函数带有原型链继承、参数传递等),可能需要更复杂的逻辑来处理。在面试中,你可以根据具体要求来实现 `new` 的功能。
阅读全文