JavaScript中创建对象的7种模式和实现继承的6种方式 | GCidea's blog

作者:JerryXia | 发表于 , 阅读 (19)
目录1. 前言2. JavaScript中对象的基本概念2.1. 创建对象的2种基本方法2.1.1. 创建一个Object实例2.2. 属性与特性2.2.1. 数据属性的特性2.2.2. 访问器属性的特性2.3. ES5新增的关于Object的几个实用方法3. 创建对象的7种模式3.1. 工厂模式3.2. 构造函数模式3.3. 原型模式3.4. 组合使用构造函数模式和原型模式3.5. 动态原型模式3.6. 寄生构造函数模式3.7. 稳妥构造函数模式4. 实现继承的6种方式4.1. 原型链4.2. 借用构造函数4.3. 组合继承4.4. 原型式继承4.5. 寄生式继承4.6. 寄生组合式继承
前言  JavaScript是一种面向对象(OO)的语言,但由于ECMAScript没有类的概念(ES6引入关键字class),所以在js中创建对象的方法也与其他基于类的语言有所不同。本篇总结在JavaScript中创建对象的7种方法;并在此基础上,总结实现继承的6种方式。
JavaScript中对象的基本概念创建对象的2种基本方法创建一个Object实例12345678910111213141...阅读全文

JavaScript中值传递和引用传递的典例探究 | GCidea's blog

作者:JerryXia | 发表于 , 阅读 (16)
目录1. 概述2. 值传递3. 引用传递4. 两者的“互相转换”
概述  在Javascript中,基本类型(null, undefined, number, string, boolean, symbol)是通过值传递方式进行,而复合类型(object, array, function)则是通过引用传递方式进行。  但是,由于Javascript工作机制所决定,在js中,引用指向的其实是值,而无法指向其他引用,这和其他语言中的指针并不相同。  其实,两者都可以算是“值”传递,只不过“值传递”传递的是基本类型本来的值,而“引用传递”传递的则是复合对象的地址值。
值传递案例一:12345var a = 2;var b = a;b++;b;  //3a;  //2
上例说明基本类型的a的值在赋值给b时,是将2这个值赋给了b,此后b++不会改变a的值。
案例二:12345var a = [1,2,3];var b = a;b.push(4);b;  //[1,2,3,4]a;  //[1,2,3,4]
上例说明复合类型的a在赋值给b时,是将2内存中[1,2,3,4]这个对象的引用赋...阅读全文

JavaScript中的对象、constructor属性、prototype属性对比分析 | GCidea's blog

作者:JerryXia | 发表于 , 阅读 (16)
目录1. 前言2. JavaScript对象简述2.1. 定义2.2. 属性类型2.3. 对象共有的“特性”3. JavaScript对象创建方式4. 创建对象-构造函数模式(constructor属性相关)4.1. 工厂模式与构造函数模式的对比4.2. 对象的constructor属性4.3. 构造函数模式存在的缺陷5. 创建对象-原型模式(prototype属性相关)5.1. 原型模式的案例5.2. 理解原型对象(prototype属性)5.3. 原型链操作5.4. 某个属性属于谁?(实例 or 原型?)5.5. 原型对象的重写5.6. 原型对象的动态性5.7. 原生对象的原型6. 总结
前言  首先想说的是,这篇文章的题目准确怎么定我就考虑了不少时间。想过“JavaScript中的对象及其constructor属性和prototype属性”,想过“JavaScript中的对象、构造函数对象(constructor)和原型对象(prototype)”等等,但总觉得不够清楚。说实话现有的这个题目也不一定是很好的,只是相比较之下,选择一个“三者相对独立”的说法,这样就不会有先入为主的...阅读全文

前端优化:[dns-prefetch] DNS预解析 | GCidea's blog

作者:JerryXia | 发表于 , 阅读 (20)
目录1. 背景2. 定义与优势3. 实践3.1. 写法3.2. 在Chrome中进行观察
背景  对提升网页性能,提高加载速度和用户体验的不断重视。
定义与优势  DNS Prefetch,即DNS预获取,是前端优化的一部分。当你浏览网页时,浏览器会在加载网页时对网页中的域名进行解析缓存,这样在你单击当前网页中的连接时就无需进行 DNS 的解析,减少用户等待时间,提高用户体验。一般来说,在前端优化中与 DNS 有关的有两点:
减少DNS的请求次数进行DNS预获取现在大多数新浏览器已经针对DNS解析进行了优化,典型的一次DNS解析需要耗费20-120毫秒,减少DNS解析时间和次数是个很好的优化方式。DNS Prefetching 是让具有此属性的域名不需要用户点击链接就在后台解析,而域名解析和内容载入是串行的网络操作,所以这个方式能 减少用户的等待时间,提升用户体验 。
默认情况下浏览器会对页面中和当前域名(正在浏览网页的域名)不在同一个域的域名进行预获取,并且缓存结果,这就是隐式的 DNS Prefetch。如果想对页面中没有出现的域进行预获取,那么就要使用显示的 DNS Pr...阅读全文

常见数据格式的正则表达式验证 | GCidea's blog

作者:JerryXia | 发表于 , 阅读 (23)
目录1. 前言2. 正则表达式的学习3. 验证输入是否为空3.1. 表达式3.2. 解释4. 验证输入是否为英文字母(大小写)+数字4.1. 表达式4.2. 解释5. 验证输入是否为英文字母(大小写)+数字+下划线5.1. 表达式5.2. 解释6. 验证输入是否为汉字6.1. 表达式6.2. 解释7. 验证输入是否为整数7.1. 表达式7.2. 解释8. 验证输入是否为正整数8.1. 表达式8.2. 解释9. 验证输入是否为负整数9.1. 表达式9.2. 解释10. 验证输入是否为非负整数(正整数 + 0)10.1. 表达式10.2. 解释11. 验证输入是否为非正整数(负整数 + 0)11.1. 表达式11.2. 解释12. 验证输入是否为n位的数字12.1. 表达式12.2. 解释13. 验证输入是否为至少n位的数字13.1. 表达式13.2. 解释14. 验证输入是否为m~n位的数字14.1. 表达式14.2. 解释15. 验证输入是否为浮点数15.1. 表达式15.2. 解释16. 验证输入是否为正浮点数16.1. 表达式16.2. 解释17. 验证输入是否为负浮点数17.1....阅读全文