2022-09-18笔试题00
请注意,本文编写于 586 天前,最后修改于 586 天前,其中某些信息可能已经过时。

面试高频手撕代码题

手写一个 new

new 的作用:

  1. 首先创建了一个新的空对象
  2. 设置原型,将对象的原型设置为函数的 prototype 对象。
  3. 让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)
  4. 判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。

实现:

function myNew() {
  // 1.创建空对象
  let obj = {};
  let constructor = [...arguments][0];
  let params = [...arguments].slice(1);

  // 2.空对象的原型指向构造函数的原型
  obj.__proto__ = constructor.prototype;

  // 3.执行构造函数的代码
  var ret = constructor.apply(obj, params);

  // 4.判断返回值类型:
  // 如果是基本值类型,则返回的创建的'空对象'
  // 如果是引用类型,则返回这个引用类型的对象
  var flag = ret && ret instanceof Object;
  return flag ? ret : obj;
}
// test
function A(name) {
  this.name = name;
}
var a1 = myNew(A, 'Lee');
var a2 = new A('Lee');
console.log(a1, a2);

本文作者:前端小毛

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!