JavaScript this 和对象原型

this 实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。 函数调用时应用了 this 的默认绑定,因此 this 指向全局对象。如果使用严格模式(strict mode),那么全局对象将无法使用默认绑定,因此 this 会绑定到 undefined,需要注意的是指向与函数默认绑定与函数的定义位置是否是严格模式有关,与函数调用时是否严格模式无关。 绑定规则 ...

JavaScript call 和 apply 方法区别和使用场景

call() 方法在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法。 function.call(thisArg, arg1, arg2, ...) thisArg 可选参数,函数运行时指定的 this 值。需要注意的是,指定的 this 值并不一定是该函数执行时真正的 this 值,如果这个函数处于非严格模式下,则指定为 null 和 ...

JavaScript 数组乱序算法

var values = [1, 2, 3, 4, 5]; values.sort(function() { return Math.random() - 0.5; }); console.log(values); 使用默认 sort 方法,随机返回升序或降序排序,最终得到一个随机数组。 存在的问题 并非完美随机,如果以数组最后一个值出现的概率来讲,存 ...

JavaScript 函数防抖与函数节流

其概念其实是从机械开关和继电器的“去弹跳”(debounce)衍生出来的,基本思路就是把多个信号合并为一个信号。事件内的N个动作会变忽略,只有事件后由程序触发的动作有效。如果在间隔内触发的事件会取消上次事件,并等待是否间隔内还有事件触发,如果有则继续取消执行,如果没有则执行本次事件。 定时器 每次执行函数前,先清除上次的 setTimeout ,如果在间隔时间内没有再次触发事件 ...

Leaflet 学习系列(四)如何写插件理论篇

本篇主要介绍 Leaflet 开发自定义插件的一些理论知识,在日常开发中,仅仅使用 Leaflet 提供的类虽然能满足一些基本需求,但是在一些功能点的实现上需要我们自己写插件来实现功能。如上文中为了实现点聚合的效果,我们就使用了三方插件,目前 Leaflet 相关的三方插件已经基本满足大部分需求,如果你有一些需求不知道怎么实现,可以先从这里找一找,如果没有找到的合适的 ...

Leaflet 学习系列(三)标记以及矢量图

上文介绍了如何使用 Leaflet 加载地图,实际使用时我们不仅仅只加载地图,更多的会在地图上添加一些标记,结合聚合渲染等可视化效果,更清晰的呈现标记点的分布态势(比如添加银行网点的位置信息,附近的商圈信息等等)。也可以添加一些矢量图并设置不同的样式以及属性来区分不同的业务片区,更加直观的服务于业务(比如添加不同物流站点的配送信息以及站点的配送区域等等)。这些功能的实现则需要使用到 Le ...

Leaflet 学习系列(二)加载地图

上文说到使用 Leaflet 可以方便的加载和切换不同的地图作为底图,Mapbox 地图、谷歌地图、天地图、高德地图、百度地图等。那么本篇文章就来介绍下如何快速开始使用 Leaflet 加载和切换不同的地图,以及地图相关的基础知识。 准备 HTML 页面 需要以下准备步骤: 创建 HTML 页面 <html lan ...

Leaflet 学习系列(一)初识

最近在学习 WebGIS 相关框架,现在 WebGIS 平台基本上有三类:一是专业的 GIS 服务商,像全球最成功的 GIS 软件公司 Esri,其提供了齐全 GIS 软件和平台解决方案。二是提供 WebGIS 的各种服务,如百度地图、高德地图等。三是开源的 GIS 软件,其中 WebGIS 服务器比较有代表性的有 GeoServer,前端开源库有 Leaflet 和 ...