初涉JavaScript模式 (2) : 基本技巧】的更多相关文章

尽量少用全局变量 大量使用全局变量会导致的后果 全局变量创建以后会在整个JavaScript应用和Web页面中共享.所有的全局变量都存在于一个全局命名空间内,很容易发生冲突 不知不觉创建了全局变量 其原因在于JavaScript的两个特性,第一个是JavaScript可直接使用变量而无需声明,第二个是JavaScript的暗示全局变量的概念,即任何变量如果未经声明,就为全局对象所有 为了避免我们无意间创建了全局变量 我们可以使用var声明变量 另一种创建暗示全局变量的反模式是带有var声明的链式…
总结 不知不觉写初涉JavaScript模式系列已经半个月了,没想到把一个个小点进行放大,竟然可以发现这么多东西. 期间生怕对JS的理解不到位而误导各位,读了很多书(个人感觉JS是最难的oo语言),也纠正了不少自己的观念和认知错误. 但是久而久之发现,偏离了我原本的思维,我原本的想法是把自己的知识碎片进行一个汇总然后参照现有书籍(权威)的逻辑罗列出来,而随着边看书边写博这种方式,我最初的思维完全被书作者的逻辑牵着走,导致文章没有了我预想的作用. 这一方面是由于我的阅历和经验包括处理问题的逻辑不到…
引子 博客断了一段时间,不是不写,一是没时间,二是觉得自己沉淀不够,经过一段时间的学习和实战,今天来总结下一个老生常谈的东西: 代码复用. 为何复用 JS门槛低,故很多人以为写几个特效就会JS,其实真正混前端的人都知道,JS写的好和写的不好差距是很大的,前段时间看到一个前端为了实现一个浮层的显示与隐藏花了100多行代码,去遍历各个子元素,挨个去设置display.还有一个很常见的场景,为了给一个UL下面的n个li绑定事件,遂遍历所有的li去bind,这些例子在日常的开发中,比比皆是,为什么有这种…
引子 上一篇说了模块模式,而对于其中的命名空间模式其实也是有着一些问题,比如每添加一个模块或则深入叠加都会导致长命名,并且对于多个库的不同版本同时运行,一不小心就会污染全局标识,而这两天也发现了JSer对此也有解决办法,由于不是特别喜欢这种模式,但是在YUI3中大量的用到了这种模式,顾从网上扒了一篇来说明一下,这种模式就是沙箱模式. 什么是沙箱模式 沙箱模式(Sandbox Pattern),顾名思义沙箱模式是创建了一个"沙箱",可以理解为创建了一个黑盒,我们不管在里面做什么都不会影响…
引子 这篇算是对第9篇中内容的发散和补充,当时我只是把模块模式中的一些内容简单的归为函数篇中去,在北川的提醒下,我才发觉这是非常不严谨的,于是我把这些内容拎出来,这就是这篇的由来. 什么是模块模式 在JavaScript中没有包(Package)的概念,而面对日益庞大的JavaScript代码,而这正促使模块化开发的迫切需求,所以也就诞生了JavaScript的模块模式, 最早这么叫的是老道,他称之为 模块模式 (Module Patterns). 模块模式提供了用于创建独立解耦的代码片段的工具…
写在前面 不知不觉写到第10篇了.这篇写起来很忐忑,终于和高级搭上边了(呵呵),这篇我们 主要 说一下 JS 方法的部分高级用法(我知道的),笔者水平有限,难免有错.废话不多少,进入正文. 初始化 我们在看一些别人写的优秀的代码,特别是组件时,我们经常能发现有init或initializa这样的方法,它一般执行的都是初始化.那初始化一般都有几种呢,我们来一一介绍: 初始化对象 初始化对象,顾名思义,就是对带着一堆具体逻辑的对象进行初始化.直接上代码: ```javascript var Wr =…
回调模式 上一篇,对JavaScript函数进行了大体的介绍,这一篇对一些在工作中经常遇到的情况进行扩展. 在工作中,我们经常遇到很多需求,比如现在有一个需求: 一栋10层的大楼,当我们在坐电梯时,电梯每上一层,每层的电梯显示屏上即时显示电梯当前所在的楼层. 这样我们可能不到1s,就想到了解决方案,只要电梯每上一层,把每一层的电梯显示屏数字 +1 ,代码核心如下: ```javascript function processArrayA(nums, scalar) { var arr = [];…
组合使用构造函数模式和原型模式 上篇,我们提到了原型模式的缺点,就是每个实例不能拥有自己的属性,因为纯原型模式所有的属性都是公开给每个实例的,故我们可以组合使用构造函数模式和原型模式.构造函数用来定义实例的属性,而原型模式用来定义方法和公用属性.这样的话,每个实例都有自己的属性副本(而不是指向原型的引用),同时它也共享原型上方法的引用.而且,这种混合模式还支持对构造函数传参,所以可以说是结合了两种模式的优点.示例如下: ```javascript function Animal(name,typ…
原型与in操作符 有两种方式使用in操作符:单独使用和在for-in循环中使用. 在单独使用时,in操作符会遍历实例公开(可枚举)的属性,如果找到该指定属性则返回true,无论该指定属性是存在与实例中还是原型中.直接上代码: ```javascript function Animal(){ } Animal.prototype.name = "animal" var tom = new Animal(); tom.age = 22; console.log("name&quo…
什么是原型模式? 原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象.--引自JavaScript设计模式 我们创建的每一个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象包含了所有由指向他的构造函数所生成的实例的共享属性和方法.说的通俗点,就是一个对象包含了一些属性和方法,而所有prototype为这个对象的构造函数所创建的实例都可以共享这个对象的属性和方法.直接上代码: ```javascript function…