面试题准备

1.new一个对象发生了什么?

function _new() {
  let obj = {};
  let Con = [].shift.call(arguments);
  obj.__proto__ = Con.prototype;
  let result = Con.apply(obj, arguments);
  return typeof obj === "object" ? obj : {};
}

  1.创建一个对象

  2.链接到原型

  3.绑定this对象

  4.返回对象

 

2.发布订阅

什么是发布订阅:无论何时当我们在a处发送了消息,订阅过a处消息的地方都可以接收到发送的消息

const obj = {}  // 用于存储所有订阅的回调。把订阅id作为对象的属性

function on(id,f){   // 订阅消息的函数。这里的id与发布消息处的id对应,f使用来接收消息的回调
   if(!obj[id]) obj[id] = []
   obj[id].push(f)    
}

function emit(id,msg){  // 发布消息的函数。这里的id与订阅消息的id对应
    obj[id].forEach(f=>f(msg))
}

on('hhh',(msg) => {console.log('a处接收消息',msg)})
on('hhh',(msg) => {console.log('b处接收消息',msg)})

emit('hhh','哈哈哈')

 3.热更新原理

Webpack HMR 特性的原理并不复杂,核心流程:

使用 webpack-dev-server (后面简称 WDS)托管静态资源,同时以 Runtime 方式注入 HMR 客户端代码;
浏览器加载页面后,与 WDS 建立 WebSocket 连接;
Webpack 监听到文件变化后,增量构建发生变更的模块,并通过 WebSocket 发送 hash 事件;
浏览器接收到 hash 事件后,请求 manifest 资源文件,确认增量变更范围;
浏览器加载发生变更的增量模块;
Webpack 运行时触发变更模块的 module.hot.accept 回调,执行代码变更逻辑;
done;

posted @ 2022-12-15 23:26  baller  阅读(25)  评论(0)    收藏  举报