观察者模式之ES6实现(一)】的更多相关文章

一.问题描述实现一个EventEmitter类,这个类包含以下方法:on(监听事件,该事件可以被触发多次)once(也是监听事件,但只能被触发一次)fire(触发指定的事件)off(移除指定事件的某个回调方法或者所有回调方法) class EventEmitter { /**请补充你的代码***/ } const event = new EventEmitter() const drink = (person) => { console.log(person + '喝水') } event.on…
一.参考链接 https://github.com/JacksonTian/eventproxy/tree/master/lib 二.代码实现 // eventProxy.js 'use strict'; const eventProxy = { onObj: {}, oneObj: {}, on: function(key, fn) { if(this.onObj[key] === undefined) { this.onObj[key] = []; } this.onObj[key].pus…
观察者模式是指函数自动观察数据对象的变化, 一旦对象有变化,函数就会自动执行. 它定义了一种一对多的依赖关系,我们用Proxy来实现一个简单的观察者模式(PS: 初学我们认为 观察者模式 == 发布订阅模式, 其实它们有点不同). 例子: const callbacks = new Set();const observe = fn => callbacks.add(fn);const observable = obj => new Proxy(obj, {set}); function set…
呼呼...前不久参加了一个笔试,里面有一到JS编程题,当时看着题目就蒙圈...后来研究了一下,原来就是所谓的观察者模式.就记下来...^_^ 题目 [附加题] 请实现下面的自定义事件 Event 对象的接口,功能见注释(测试1) 该 Event 对象的接口需要能被其他对象拓展复用(测试2) // 测试1 Event.on('test', function (result) { console.log(result); }); Event.on('test', function () { cons…
目的 观察者模式是常见的设计模式,可以被应用到MV*框架的Model上,来实现对数据变化的监听. 基本概念 观察者模式是一种常见的设计模式.被观察者可以被订阅(subscribe),并在状态发生改变时通知订阅者. 观察者模式的实现主要涉及三个接口: 1. subscribe (evtName, handler):订阅被观察者的指定事件. 2. unsubscribe (evtName, handler):取消对被观察者指定事件的订阅. 3. publish (evtName, data):被观察…
一.ES6语法 ES6中对数组新增了几个函数:map().filter().reduce() ES5新增的forEach(). 都是一些语法糖. 1.1 forEach()遍历数组 forEach()方法用来循环遍历数组,方法中的function回调函数接收3个参数 参数1是遍历的数组内容(item):参数2是对应的数组索引(index),参数3是是数组本身(array). [].forEach(function(item,index,array){ ... }) var arr = ["白板&…
概述 Proxy 与 Reflect 是 ES6 为了操作对象引入的 API . Proxy 可以对目标对象的读取.函数调用等操作进行拦截,然后进行操作处理.它不直接操作对象,而是像代理模式,通过对象的代理对象进行操作,在进行这些操作时,可以添加一些需要的额外操作. Reflect 可以用于获取目标对象的行为,它与 Object 类似,但是更易读,为操作对象提供了一种更优雅的方式.它的方法与 Proxy 是对应的. 基本用法 Proxy 一个 Proxy 对象由两个部分组成: target .…
一. let/const: 1. “暂时性死区”概念:在代码块内,使用let/const命令声明变量之前,该变量都是不可用的.这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ).“暂时性死区”也意味着typeof不再是一个百分之百安全的操作. 2. 块作用域与函数声明: function f() { console.log('I am outside!'); } (function () { if (false) { // 重复声明一次函数f function…
Reflect 概述 Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API.Reflect对象的设计目的有这样几个. (1) 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上.现阶段,某些方法同时在Object和Reflect对象上部署,未来的新方法将只部署在Reflect对象上.也就是说,从Reflect对象上可以拿到语言内部的方法. (2) 修改某些Object方法的返回结果,让其变得更…
Reflect是ES6为操作对象而提供的新API,而这个API设计的目的只要有: 将Object对象的一些属于语言内部的方法放到Reflect对象上,从Reflect上能拿到语言内部的方法.如:Object.defineProperty 修改某些object方法返回的结果.如:Object.defineProperty(obj, name, desc)在无法定义属性的时候会报错,而Reflect.defineProperty(obj, name, desc)则会返回false 让Object的操…