每日前端手写题--day18

以下题目来自掘金等其它博客,但是问题的答案都是根据笔者自己的理解做出的。如果你最近想要换工作或者巩固一下自己的前端知识基础,不妨和我一起参与到每日刷题的过程中来,如何?

第18天要刷的手写题如下:

  1. 实现extends操作符
  2. 不使用a标签完成a标签的功能
  3. 实现redux中的compose功能

下面是我的一些理解:

1. 实现extends操作符

分为以下几个步骤:

  • 创建构造函数
  • 设置构造函数的prototype的值并使之不可写
  • 设置子类和父类之间的关系
  • 设置子类原型上的方法
js 复制代码
// 使用extends的继承
class F extends T {
  constructor(name, age) {
    super(name);
    this.age = age;
  }

  getAge(){
    return this.age;
  }
}

// 可以用下面的方法代替
function F(age, ...rest) {
  const _this = Object.getPrototypeOf(this).apply(this, rest);
  _this.age = age;
  return _this;  
}

F.prototype = Object.create(T.prototype, {
  constructor: {value: F, writable: true, configurable: true}
});

Object.defineProperty(F, "prototype", {writable: false});

Object.setPrototypeOf(F, T);
F.prototype.getAge = function getAge(){
  return this.age;
}

2. 不使用a标签完成a标签的功能

主要是考虑在本页签上打开还是在新的页签上打开;前者是改变window.location.href的值,而后者是调用window.open的方法。

js 复制代码
function enableLink (target, url, style='blank') {
  const clickCb = function (){
    if (style==='origin') {window.location.href = url;} else if (style === 'blank') {window.open(url, '_blank')};
  }
  target.addEventListener('click', clickCb);
  return () => target.removeEventListener('click', clickCb);
  }
}

3. 实现redux中的compose功能

本质上是将二维的函数数组映射成一个一维的复合函数,使用数组上面的reduce方法完成此功能尤为合适

js 复制代码
function myCompose(...funs) {
  if (funs.length === 0) return arg => arg;
  if (funs.length === 1) return funs[0];
  return funs.reduce((_composed, _current)=>(...args)=>_composed(_current(...args)));
}
相关推荐
_风满楼3 分钟前
TDD实战-会议室冲突检测的红绿重构循环
前端·javascript·算法
Rkgua8 分钟前
JS中的惰性函数基本介绍
前端·javascript
客场消音器24 分钟前
我用两周半 Vibe Coding 做了一个前额叶训练的微信小程序
前端·javascript·后端
铁皮饭盒1 小时前
成为AI全栈 - 第4课:Drizzle ORM SQLite Elysia 数据库实战
前端·后端
ascarl20101 小时前
Linux.do 帖子整理:AI 调用 Chrome DevTools 调试前端页面
linux·前端·人工智能
m0_716255001 小时前
第一部分 数据开发 面试全题 模拟口述版(自问自答)
java·数据库·面试
DanCheOo2 小时前
开源 | 我是怎么用 ai-memory 让 Cursor 每次开新对话都自动知道项目背景的
前端·人工智能·ai·ai编程
MPGWJPMTJT2 小时前
告别手动切换 Node 版本:从 nvm 迁移到 Volta
前端
李温候2 小时前
互联网大厂Java求职者面试全攻略
java·数据库·面试·orm·构建工具·web框架·互联网大厂
Apifox2 小时前
Apifox 近期更新|AI Agent Debugger、A2A Debugger、Postman API 导入、Ask AI 侧边栏对话
前端·人工智能·后端