当前位置: 首页 > news >正文

【前端面试手撕题】简易深拷贝、深拷贝、寄生组合式继承、发布订阅模式、观察者模式

FED16 简易深拷贝

描述
请补全JavaScript代码,要求实现对象参数的深拷贝并返回拷贝之后的新对象。
注意:

  1. 参数对象和参数对象的每个数据项的数据类型范围仅在数组、普通对象({})、基本数据类型中]
  2. 无需考虑循环引用问题
<!DOCTYPE html>
<html><head><meta charset=utf-8></head><body><script type="text/javascript">const _sampleDeepClone = target => {// 补全代码if(typeof target === 'object'&&target!==null){const cloneTarget=Array.isArray(target)?[]:{};for(prop in target){if(target.hasOwnProperty(prop)){cloneTarget[prop]=_sampleDeepClone(target[prop])}}return cloneTarget}else{return target}}</script></body>
</html>

FED17 深拷贝

描述
请补全JavaScript代码,要求实现对象参数的深拷贝并返回拷贝之后的新对象。
注意:

  1. 需要考虑函数、正则、日期、ES6新对象
  2. 需要考虑循环引用问题
<!DOCTYPE html>
<html><head><meta charset=utf-8></head><body><script type="text/javascript">const _completeDeepClone = (target, map = new Map()) => {// 补全代码if(target===null) return targetif(typeof target!=='object') return targetconst constructor=target.constructorif(/^(Function|RegExp|Date|Map|Set)$/i.test(constructor.name)) return new constructor(target)if(map.get(target)) return map.get(target)map.set(target,true)const cloneTarget=Array.isArray(target)?[]:{}for(prop in target){if(target.hasOwnProperty(prop)){cloneTarget[prop]=_completeDeepClone(target[prop],map)}}return cloneTarget}</script></body>
</html>

FED18 寄生组合式继承

描述
请补全JavaScript代码,要求通过寄生组合式继承使"Chinese"构造函数继承于"Human"构造函数。要求如下:

  1. 给"Human"构造函数的原型上添加"getName"函数,该函数返回调用该函数对象的"name"属性
  2. 给"Chinese"构造函数的原型上添加"getAge"函数,该函数返回调用该函数对象的"age"属性
<!DOCTYPE html>
<html><head><meta charset=utf-8></head><body><script type="text/javascript">// 补全代码function Human(name) {this.name = namethis.kingdom = 'animal'this.color = ['yellow', 'white', 'brown', 'black']}Human.prototype.getName=function(){return this.name}function Chinese(name,age) {Human.call(this,name)this.age=agethis.color = 'yellow'}Chinese.prototype=Object.create(Human.prototype)Chinese.prototype.constructor=ChineseChinese.prototype.getAge=function(){return this.age}</script></body>
</html>

FED19 发布订阅模式

描述
请补全JavaScript代码,完成"EventEmitter"类实现发布订阅模式。
注意:

  1. 同一名称事件可能有多个不同的执行函数
  2. 通过"on"函数添加事件
  3. 通过"emit"函数触发事件
<!DOCTYPE html>
<html><head><meta charset=utf-8></head><body><script type="text/javascript">class EventEmitter {// 补全代码constructor(){this.events={}}on(event,fn){if(!this.events[event]){this.events[event]=[fn]}else{this.events[event].push(fn)}}emit(event){if(this.events[event]){this.events[event].forEach(callback=>callback())}}}</script></body>
</html>

FED20 观察者模式

描述
请补全JavaScript代码,完成"Observer"、"Observerd"类实现观察者模式。要求如下:

  1. 被观察者构造函数需要包含"name"属性和"state"属性且"state"初始值为"走路"
  2. 被观察者创建"setObserver"函数用于保存观察者们
  3. 被观察者创建"setState"函数用于设置该观察者"state"并且通知所有观察者
  4. 观察者创建"update"函数用于被观察者进行消息通知,该函数需要打印(console.log)数据,数据格式为:小明正在走路。其中"小明"为被观察者的"name"属性,"走路"为被观察者的"state"属性
    注意:
  5. "Observer"为观察者,"Observerd"为被观察者
<!DOCTYPE html>
<html><head><meta charset=utf-8></head><body><script type="text/javascript">// 补全代码class Observerd {constructor(name){this.name=name;this.state='走路';this.Observers=[];}setObserver(Observer){this.Observers.push(Observer);}setState(state){this.state=state;this.Observers.forEach(observer=>observer.update(this))}}class Observer {constructor(){}update(Observerd){console.log(Observerd.name+'正在'+Observerd.state)}}</script></body>
</html>
http://www.lryc.cn/news/114491.html

相关文章:

  • 【生物医学】应激(应激反应)全身适应综合征
  • 浅析基于安防监控EasyCVR视频汇聚融合技术的运输管理系统
  • VBA技术资料MF41:VBA_将常规数字转换为文本数字
  • Wavefront .OBJ文件格式解读【3D】
  • JavaScript:ES6中类与继承
  • 通用指令(汇编)
  • 苏宁数据治理实战方法论和三字经
  • 创建型设计模式:3、单例模式(C++实现实例 线程安全)
  • JavaWeb学习笔记
  • ad+硬件每日学习十个知识点(24)23.8.4(时序约束,SignalTap Ⅱ)
  • FortiGate防火墙日志审计运维
  • 基于yolo v5与Deep Sort进行车辆以及速度检测与目标跟踪实战
  • 以指标驱动,保险、零售、制造企业开启精益敏捷运营的新范式
  • MyBatis-动态SQL-foreach
  • VUE框架:vue2转vue3全面细节总结(3)路由组件传参
  • 音视频技术开发周刊 | 305
  • vue 图片base64转化
  • TS学习03-类
  • FastAPI(七)应用配置
  • eclipse Java Code_Style Code_Templates
  • 01《Detecting Software Attacks on Embedded IoT Devices》随笔
  • APP外包开发的学习流程
  • 第0章 环境搭建汇总
  • 大数据培训课程-《机器学习从入门到精通》上新啦
  • 暗黑版GPT流窜暗网 降低犯罪门槛
  • 数电与Verilog基础知识之同步和异步、同步复位与异步复位
  • JAVA Android 正则表达式
  • 【MFC】07.MFC第三大机制:消息映射-笔记
  • 【jvm】jvm的生命周期
  • 激光雷达测距和摄像头联合棋盘格反射率标定板