随笔分类 - JavaScript
1995年由Netscape公司的Brendan Eich最初设计的一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言。
摘要:原型模式(Prototype Pattern) 定义:用于创建重复的对象,同时又能保证性能。目的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。场景:在运行期建立和删除原型。 let productPrototype = { init: (type) => { this.type
阅读全文
摘要:抽象工厂模式(Abstract Factory Pattern) 定义:抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。或者说,是其他工厂的工厂。目的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。场景:系统的产品有多于一个的产品族,而系统只消费其中某一
阅读全文
摘要:建造者模式(Builder Pattern) 定义:使用多个简单的对象一步一步构建成一个复杂的对象。 目的:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 场景:一些基本部件不会变,而其组合经常变化的时候。 // 声明一个产品类 class Product { constru
阅读全文
摘要:/** * 比较两个时间的时间差 * @param startTime 开始时间 * @param endTime 结束时间 * @demo compareTime(new Date('2019-12-24 16:02').getTime(), new Date().getTime()) */ function compareTime (startTime, endTime) { var retV
阅读全文
摘要:/** * 监听浏览器标签页的显示与隐藏 */ class ListenerPageVisibility { constructor () { // 设置隐藏属性和改变可见属性的事件的名称 this.hidden = '' this.visibilityChange = '' if (typeof document.hi...
阅读全文
摘要:单例模式(Singleton Pattern): 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 目的:阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。 场景:如一个系统中可以存在多个打印任务,但是同时只能有一个正在工作的任务。 例:JS代码实现 // 惰性单
阅读全文
摘要:装饰模式(Decorator Pattern): 定义:在不改变原对象的情况下,动态的给对象添加一些额外的职责。就功能而言,装饰模式相比生成子类更为灵活。 目的:把类的核心职责和装饰功能区分开。可以去除相关类中重复的逻辑。 场景:当系统需要扩展一个类的功能,或者客户端需要动态的给一个对象添加功能,并
阅读全文
摘要:// 滚动条位置 var scrollPosition = { // 位置 result: 0, // 监听位置 rememberPosition: function () { var type = 'scroll' var handle = function () { var scrollTop = win...
阅读全文
摘要:先引用jquery、jszip、FileSaver,然后封装下载方法: 一、引用 <script src="lib/jquery-3.4.0.min.js"></script> <script src="lib/jszip.min.js"></script> <script src="lib/FileSaver.min.js"></script> 二、方法封装 var FunLib = { //
阅读全文
摘要:策略模式(Strategy Pattern): 定义:定义了一族算法; 封装了每个算法; 这族的算法可互换代替。 目的:将算法的使用与算法的实现分离开来。 场景:可用来消除大量的条件分支语句。 例:JS代码实现 // 策略算法封装 let strategy = { add (number1, num
阅读全文
摘要:工厂模式(Factory Pattern): 定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。 目的:工厂模式是为了解耦,把对象的创建和使用的过程分开。场景:需要生成复杂对象,需要降低耦合度的场景。 例子:JS代码实现 let operat
阅读全文
摘要:/** * 深度比较两个对象是否相等 * @type {{compare: compareObj.compare, isObject: (function(*=): boolean), isArray: (function(*=): boolean)}} */ var compareObj = { // 比较两个对象是否相等 compare: function (oldDa...
阅读全文
摘要:先创建公共文件error-reported.js 内容如下: /** * 获取前端错误信息进行上报 * @param iframe */export function catchError (iframe) { let _this = this || window let source = '来自外
阅读全文
摘要:/** * 合并两个函数 * @param functionA 先执行 * @param functionB 执行完 functionA 后返回 * @returns {*} */ function mergeFunction (functionA, functionB) { if (!functionA || !functionB) return var merge ...
阅读全文
摘要:解决方法:
阅读全文
摘要:README.md
阅读全文
摘要:一、什么是this? this是JavaScript语言的一个关键字,它是函数运行时在函数体内部自动生成的一个对象,只能在函数体内部使用。函数的不同使用场合,this的指向不同。 在ES5中,this永远指向最终调用它的对象。 二、如何改变this的指向? 使用 ES6 的箭头函数箭头函数的 thi
阅读全文
摘要:解决方法: audio.load() let playPromise = audio.play() if (playPromise !== undefined) { playPromise.then(() => { audio.play() }).catch(()=> { }) } 原因: 从Chr
阅读全文
摘要:什么是内存泄露? 已经不再使用的内存未能被程序释放,叫内存泄露(memory leak)。 内存泄露会带来什么样的后果? 内存泄露会因为减少可用内存数量从而降低计算机性能,严重的可能导致设备停止正常工作,或者应用程序崩溃。 什么情况下出现内存泄漏? 首先了解一下垃圾回收:垃圾回收(英语:Garbag
阅读全文
摘要:GitHub: https://github.com/skillnull/Get-Device-Info 在线实例:http://skillnull.com/others/GetDeviceInfo/index.html
阅读全文