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;