
精进的前端
蚁方阵
千里之行,始于足下,用代码编织技术人生
展开
-
原型链(二):原型与本体的差异与共同点
1. 原型的内容不能被串行化;2. 原型的内容也是可枚举的;3. 原型引用值的修改会影响所有的对象;4. 辨别原型与本体的差异原创 2016-08-15 16:59:22 · 432 阅读 · 0 评论 -
$.ajax使用总结(一):Form提交与Payload提交
后端处理前端提交的数据时,既可以使用Form解析,也可以使用JSON解析Payload字符串。Form解析可以直接从Request对象中获取请求参数,这样对象转换与处理相对容易,但在大片JSON数据需要提交时,可能会出现大量的数据拆分与处理工作,另外针对集合类型的处理,也是其比较孱弱的地方。而Payload的优势是一次可以提交大量JSON字符串,但无法从Request从获取参数,也会受限于JSON解原创 2017-06-19 15:27:57 · 18099 阅读 · 0 评论 -
JS基本类型与无法定义的属性
在浏览器中,变量一旦声明为基本类型,则再也无法为其添加其他属性,示例如下:// 变量一旦声明为基本类型,则无法添加属性 var username = 'yiifaa'username.from = 'china'// 输出为undefinedconsole.log(username.from)改为严格模式,再测试如上代码:"use strict";var username = 'yi原创 2017-06-22 19:10:47 · 5204 阅读 · 0 评论 -
$.ajax使用总结(三):在Spring MVC中实现文件上传
其实这样的代码已经烂大街了,客户端代码如下:let url = UrlService.url('home/upload'), fileInput = document.getElementById('file-input'), // 必须创建表单数据 data = new FormData();// 也可以添加其他数据 data.append('username原创 2017-06-22 19:12:07 · 750 阅读 · 0 评论 -
如何监测DOM对象已加载完成
在第三方插件的使用过程中,我们经常需要DOM在加载完成后执行一些操作,如果插件提供了这样的事件接口,那一切都较为简单,但在大部分的情况下,要么是设计者没有考虑到这样的问题,或者没有设计这样的接口,那这时应该怎么办呢?小组成员经常犯的一个错误是利用if判断,如下:let dom = document.getElementById('yiifaa')// dom加载完成后执行操作if(dom) {原创 2017-07-12 20:34:56 · 14306 阅读 · 4 评论 -
JS constructor探讨(一):为什么要设置prototype.constructor?
每次实现JS的继承时,代码里必有如下两句:// 用于设置原型Employee.prototype = new Person()// 设置原型的构造器Employee.prototype.constructor=Employee实现原型链就靠第一句话,但第二句话有什么用呢?先看示例代码:function Person(username) { this.username = usern原创 2017-05-30 13:52:58 · 6904 阅读 · 1 评论 -
一种字符串合并与拆分的方法
有个REST接口,能提供中文繁体到中文简体的转换服务,为了提高转换效率,需要将多个字符串合并为一个字符串,进行转换后再进行拆分,请提供一种字符串合并与拆分的解决方案。通过审题,实现方案的核心在于分割字符串的设计方案,简单的方法有: 1. 提供业务中不可能出现的字符,比如日文字符; 2. 充分利用JSON.stringify与JSON.parse特性,实现字符串的编码与解码;除此以外,还可以设计一原创 2017-06-13 22:49:12 · 4457 阅读 · 2 评论 -
moment.js的扩展方法
在moment.js的使用过程中,有时需要对moment的属性与方法进行扩展,以moment.duration的humanize方法为例:// 设置时间长度为50周var w50s = moment.duration(50, 'w').humanize()// 结果输出为1年console.log(w50s);从上面的例子可以看出,moment.js特意设计的humanize方法虽然看起来原创 2017-07-14 18:03:08 · 1715 阅读 · 0 评论 -
浏览器查询参数与表单数据的优先级问题
在提交数据的实验中,突然冒出一个这样的想法:在请求地址中与表单数据中同时添加同样的参数,并赋予不同的值,那么服务器获取参数时,究竟是取查询参数中的值,还是表单数据中的值?以用户登录为例,假定登录地址为login,在查询参数中与表单数据中同时添加信息,代码如下:// 已引入jQuery库$.post('/params?username=yiifaa&password=yiifaa', {原创 2017-07-16 00:08:15 · 2245 阅读 · 0 评论 -
Requirejs高级应用(六):模块无法加载错误的解决办法
在angular与requirejs的结合中,提示“Module name has not been loaded yet for context: _”,如下:require-lib.js:900 Error: Module name "common/app" has not been loaded yet for context: _http://requirejs.org/docs/erro原创 2017-09-07 22:12:10 · 16054 阅读 · 0 评论 -
Requirejs高级应用(三):同步加载
1. 同步加载要求在requirejs中,执行同步加载必须满足两点要求: 1. 必须在定义模块时使用,亦即define函数中; 2. 引用的资源必须是在同一个模块异步加载过的;满足了上面那么两个苛刻的条件,那同步加载还能引用于什么场景呢?原创 2016-11-29 17:40:28 · 8815 阅读 · 0 评论 -
Requirejs高级应用(七):模块导出的三种方式及优先级
在Requirejs中,模块导出共有三种方式: 1. 通过return方式导出,优先级最高; 2. 通关module.exports对象赋值导出,优先级次之; 3. 通过exports对象赋值导出,优先级最低;上面的三种优先级是绝对的优先级,无关代码的顺序,例如即使将exports导出放在最后,也会被module.exports覆盖,另外导出的内容只能是优先级最高的那个,而且仅仅包含其内容,绝原创 2017-09-09 03:13:30 · 5704 阅读 · 0 评论 -
理解SVG的缩放、偏移的计算公式
SVG中DOM元素的偏移与缩放都是基于SVG元素的左上角,所以如何理解与计算SVG中元素的真实位置就比较难,下面的例子都以圆(circle)为例。1.缩放假定缩放的比例为s,执行缩放后,圆的圆心坐标由(cx, cy)变为(cx * s, cy * s)2. 偏移假定偏移的距离为(x1, y1), 执行单纯的偏移后,圆的圆心坐标由(cx, cy)变为(cx + x1, cy + y1)3. 先偏移后缩原创 2017-05-29 12:07:00 · 9098 阅读 · 0 评论 -
一种拦截AJAX数据的方法
一个实际运营中的产品,突然遇到了这样的展示需求:在前端拦截所有的AJAX请求,将其中的XXX电力局字样全部改为XXX水利局字样。首先想到的是利用jQuery的全局AJAX方法,但检索了一遍.ajaxComplete、.ajaxComplete、.ajaxSuccess等全局方法,发现所有的全局方法都只能对AJAX数据进行只读操作。难道真的没有办法了吗?重新复写$.ajax方法是否可行?应该可以达到目原创 2017-02-20 17:10:50 · 5620 阅读 · 0 评论 -
跨窗口通信的几种方法
推荐几种在浏览器端跨窗口通信的几种方法,并比较其优劣。原创 2016-07-15 16:03:58 · 4953 阅读 · 1 评论 -
详解链接的五个伪类
HTML中的A元素共有五个伪类,很多人难以区别他们之间的关系,并且很多文档上都没有说清楚活的链接与激活的链接之间的关系,下面我们来详细说明他们之间的区别。原创 2016-08-18 16:01:19 · 2734 阅读 · 0 评论 -
性能优化(一):迭代DOM真的很慢吗?
在代码检查时,经常告诫小组成员尽量不要对DOM对象进行迭代,而要对JS对象进行迭代,这样它们之间的差异能达到上百倍(参见AJAX实战,其实是我记错了,不是CPU的使用量,而是内存的消耗量),有一次又在给他们谆谆教诲时,有个小丫头满脸的不服气,于是手把手地做了一次实验,然而实验却让我大吃一惊。原创 2016-08-19 16:51:31 · 1214 阅读 · 0 评论 -
原型链(一):辨别原型链的两种方法
JS对象查找属性与方法时,除了优先会从自身查找,还会不断追溯自己的原型祖先,自到追溯到Object对象的原型为止。基于JS对象原型的这种特征,为了保证调用正常,经常需要判断对象之间是否存在原型关系,这里提供两种方法,分别是getPrototypeOf与isPrototypeOf,并详细展示了它们的区别。原创 2016-08-11 18:52:32 · 2842 阅读 · 0 评论 -
Vue的加载顺序探讨(一)
在Vuejs 1.0版本中,如果父子组件进行配合,它们的生命周期执行具有如下特点:1. created总是先父后子生命周期函数created总是按照从父到子的顺序依次执行,但是兄弟之间没有严格按照这样的顺序执行,估计是采用了异步函数,不仅如此,子组件在父组件中的插入顺序也是随机的,并没有什么特别的规律。假定子组件的引用顺序如下原创 2016-11-29 15:36:31 · 16542 阅读 · 0 评论 -
前端编程中,如何消除浏览器缓存
在前端编程中,Brackets与nginx是我最喜欢的组合,调试代码与接口全在本地,完全能达到那种飞一般的编程感觉。但在开发中,最容易郁闷的是,html与js文件容易被浏览器缓存,文件都已经更新了,但感觉服务器返回的文件依然是上上上次的,非要手动清除一次浏览器的缓存,才能查看到最新的文件,这特么的也太烦了不是?查看静态文件的请求头信息,如下:Accept-Ranges:bytesContent-L原创 2016-11-29 15:37:41 · 14761 阅读 · 0 评论 -
Requirejs高级应用(四):加载require
在满足CommonJS代码编写规范下,因为require是关键字,如果需要执行同步调用,则需要显式地引入require函数(当然,直接使用requirejs也可以),如下:// 恒等于真require === requirejs在这里需要重点强调的是,require是内置模块,直接引用即可,不需要配置引用路径,否则将会得不到require函数,如下:define(['require'], fun原创 2016-11-30 15:24:49 · 2431 阅读 · 0 评论 -
一种模仿AJAX测试数据的方法
在前端编程中,经常需要编写AJAX模拟数据,但应用到生产环境后,又需要修改代码,导致大量的代码都处于调整状态,并且数据都处于静态化状态,以至于视图渲染的效果很差。能不能将模拟数据与业务逻辑完全隔离呢?如果编写一个浏览器插件,利用DOM进行通信,由插件负责创造模拟数据,而页面的HTTP通信方法负责抓取数据,同时加入是否启用模拟数据通信开关,即可完全满足上述条件,即模拟数据动态化,并且与业务数据完全隔离原创 2016-11-27 11:11:24 · 3599 阅读 · 0 评论 -
在canvas中应用font-awesome字体
在大屏应用中,如果能充分使用font-awesome字体,不仅可以节省大量的图标设计时间,还能充分利用字体文件的矢量特性,轻松添加stroke与fill样式。解决方法分为三步: 1.必须首先引入font-awesome样式文件; 2.在页面的HTML元素中隐藏所需要的字符内容 如下:<!--必须设置字体,否则无法显示 --><!-- 编码转换规则参见HTML、CSS、JS Unicode字符原创 2016-12-21 19:49:26 · 3982 阅读 · 4 评论 -
Requirejs高级应用(五):模块的唯一性鉴别
单独写一篇文章来阐述这类问题,是因为这个问题太容易犯错,并且太重要了。对require加载的模块来说,它们都是单例的,但这个唯一标识取决于它们的模块名称及相对路径,与它们的绝对路径无关,换句话说,每个文件(模块)唯一性的辨别完全依赖与模块名称。再强调一次,模块的唯一性与它们的访问路径无关,即使是地址完全相同的一份JS文件,如果引用的方式与模块的配置方式不一致,依旧会产生多个模块。看下面的例子,假定目原创 2016-12-22 11:18:27 · 720 阅读 · 0 评论 -
mouseover与mouseout的差异与联系
1. 差异mouseover与mouseout的差异主要在进入节点与节点时,在节点内的子孙节点切换时不属于这种情况。进入节点时: 1. 必然会触发mouseover,类似于jquery实现的事件类型“mouseenter”离开节点时: 1. 必然会触发mouseout,不会触发mouseover,类似于jquery实现的事件类型“mouseleave”2. 联系在节点内部切换时,例如从节点自身切原创 2017-01-11 16:59:13 · 3143 阅读 · 0 评论 -
Visual Studio Code 装饰器提示“experimentalDecorators”的解决办法
突然想体验下元编程,于是Nodejs的装饰器就成为了我的首选,但在Visual Studio Code中,始终提示如下错误:file: 'file:///e%3A/Nodejs/yo-hot-mis/src/index.es6'severity: '错误'message: '对修饰器的实验支持是一项将在将来版本中更改的功能。设置 "experimentalDecorators" 选项以删除此警告原创 2017-12-21 12:50:06 · 45491 阅读 · 27 评论