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)
好文推荐
有感好文
项目/博客推荐
值得学习的项目/作者
- https://www.samanthaming.com/tidbits/?filter=JS#CodeTidbits 优秀的老外博客,这里展示的是 js 片段
- https://github.com/yoshuawuyts/rust-for-js-peeps 前端学 rust 项目入门
面经相关
八股文相关
明日计划
- 算法:
- 学习:
- 复习:
- 手写:
- 面经复习:
TODOS
短期内要做的事情