定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换这些算法灵活多样,而且可以随意互相替换 var strategies = { 'S': function(salary) { return salary * 4 }, 'A': function(salary) { return salary * 3 }, 'B': functio...
JavaScript设计模式之单例模式
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是一种常用的模式,有些对象往往只需要一个,比如:线程池、全局缓存、浏览器中的 window 对象等。在 Javascript 开发中,单例模式的用途同样非常广泛,比如做登录弹框,它在当前页面是唯一的,无论单击...
JavaScript 闭包和高阶函数
一、闭包 变量的作用域 在函数中声明一个变量,如果变量前面没有带上关键字 var ,这个变量就会成为全局变量,用 var 关键字声明变量,变量即为局部变量,只有在函数内部可以访问 var func = function() { var a = 'JavaScript'; console.log(a); // JavaScript...
JavaScript this、call 和 apply 初识
一、this this 指向 作为对象的方法调用 当函数做为对象的方法调用时,this 指向该对象 var obj = { name: 'javaScript', getName: function() { console.log(this === obj); // true console.log(this.name); // 'javascript' } } obj.ge...
JavaScript面向对象编程之封装(数据、实现、类型、变化)
封装数据 静态类型语言的对象系统中,封装数据是由语法解析来实现的,比如:private、public、protected 等关键字来提供不同的访问权限。 Javascript 并没有提供对这些关键字的支持,我们只能依赖变量的作用域来实现封装特性,而且只能模拟出 public 和 private 这两种...
JavaScript面向对象编程之多态
多态同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果,换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。 示例 var googleMap = { show: function() { console.log('开始渲染谷歌地图'); ...
JavaScript中常见的设计模式
一、单例模式 1. 定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点 2. 核心 确保只有一个实例,并提供全局访问 3. 实现 假设要设置一个管理员,多次调用也仅设置一次,我们可以使用闭包缓存一个内部变量来实现这个单例 // 提取出通用的单例 ...
Html 资源预加载/预连接内容
Html 可以将即将要用到的资源或者即将要握手的地址提前告知浏览器让浏览器利用还在解析HTML计算样式的时间去提前准备好。 preload 使用link的 preload 属性预加载一个资源。 <link rel="preload" href="style.css" as="style"> as 属性可以指定预加载的类型,...
JS中的节流与防抖运用
节流函数和防抖函数在日常的开发中还是有很多地方用到,两个函数的目的都是为了控制函数被调用的频率 正常调用 function inputChange(val) { console.log('change:', val); } let inputEl = document.getElementById('input'); inputEl.addEventListener('keyu...
自定义Eventbus 发布订阅模式
const EventList = {}; const on = function(eventName, callback) { if (!EventList[eventName]) { EventList[eventName] = []; } EventList[eventName].push(callback); } const emit = function(eventName, params) { if (!Even...