Skip to content

1220 今日总结

今日工作

问题,原因,解决方式,优化,巧妙实现,新知识

  • 代码 review

今日心情

所见所想,有感而发

今日算法

今日学习:

今日复习:

手撕代码

防抖节流等各种手写,http和网络,浏览器原理,性能优化,Webpack

手写 instanceof

参考:https://www.cnblogs.com/chenjy259/p/14829268.html

  • 参数的左侧和右侧必须是对象
js
function myInstanceof(left, right) {
    let proto = left.__proto__;
    let prototype = right.prototype;
    
    // proto为空,即遍历到原型链的尽头
    // prototype为空,传入的构造函数异常
    if (proto === null || prototype === null) {
        return false;
    } else if(proto === prototype){
        return true;
    } else {
        myInstanceof(proto, right);		// 递归,判断right是否left的原型链上
    }
}

手写 new

new 操作符做了什么?

  • 创建一个新的对象
  • 继承父类原型上的方法.
  • 添加父类的 属性 到新的对象上并初始化. 保存方法的执行结果.
  • 如果执行结果有返回值并且是一个对象, 返回执行的结果, 否则, 返回新创建的对象。

参考:https://juejin.cn/post/6844903937405878280

js
function _new(obj, ...rest){
  // 基于obj的原型创建一个新的对象
  const emptyObj = Object.create(obj.prototype);

  // 添加属性到新创建的 emptyObj 上, 并获取obj函数执行的结果.
  const result = obj.apply(emptyObj, rest);

  // 如果执行结果有返回值并且是一个对象, 返回执行的结果, 否则, 返回新创建的对象
  return typeof result === 'object' ? result : emptyObj;
}


// 验证

function Person(firtName, lastName) {
  this.firtName = firtName;
  this.lastName = lastName;

  return 'demo';
}

const tb = new Person('Chen', 'Tianbao');
console.log(tb);

const tb2 = _new(Person, 'Chen', 'Tianbao');
console.log(tb2)

好文推荐

有感好文

项目/博客推荐

值得学习的项目/作者

面经相关

八股文相关

明日计划

  • 算法:
    • 学习:
    • 复习:
  • 手写:
  • 面经复习:

TODOS

短期内要做的事情

Released under the MIT License.