# 题目描述
请你完成一个函数_new 要求实现new操作符的功能。
# 测试用例
function test() {
  const Fn = function () {};
  const o = _new(Fn);
  const result = o.__proto__ === Fn.prototype;
  return result;
}
// true
 1
2
3
4
5
6
7
2
3
4
5
6
7
# 思路
根据题目要求,实现一个仿new功能的新"_new"函数,该函数会返回一个对象,该对象的构造函数为函数参数、原型对象为函数参数的原型,核心步骤有:
- 创建一个新对象
 - 获取函数参数
 - 将新对象的原型对象和函数参数的原型连接起来
 - 将新对象和参数传给构造器执行
 - 如果构造器返回的不是对象,那么就返回第一个新对象
 
# 代码实现
const _new = function () {
  // 补全代码
  let obj1 = {}; // 创建空对象
  // 获取函数参数
  const fn = [...arguments].shift();
  // 将新对象的原型对象和函数参数的原型连接起来
  obj1.__proto__ = fn.prototype;
  // 将新对象和参数传给构造器执行
  const obj2 = fn.apply(obj1, arguments);
  // 如果构造器返回的不是对象,那么就返回第一个新对象
  return obj2 instanceof Object ? obj2 : obj1;
};
 1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13