10条建议帮助你创建更好的jQuery插件

   本文总结了帮助你创建更好jQuery插件的10条建议。分享给大家供大家参考。具体说明如下:

  在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式。这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了。使用相同的设计模式和架构也让修复bug或者二次开发更容易。一套经过验证的架构可以保证我的插件不出大的问题,不论插件简单还是复杂。我在这里分享10条我总结的经验。

  1. 把你的代码全部放在闭包里面

  这是我用的最多的一条。但是有时候在闭包外面的方法会不能调用。

  不过你的插件的代码只为你自己的插件服务,所以不存在这个问题,你可以把所有的代码都放在闭包里面。

  而方法可能应该放在Prototype方法内部,。

  ?

1
2
3

(function($) {
//code here
})(jQuery);

  2. 提供插件的默认选项

  你的插件应该会有一些选项是可以让开发者设置的,所以提供恢复默认选项是以有必要的。 你可以通过jQuery的extend功能来设置这些选项:

  ?

1
2
3
4
5

var defaultSettings = { mode : 'Pencil',
lineWidthMin : '0',
lineWidthMax : '10',
lineWidth : '2' };
settings = $.extend({}, defaultSettings, settings || {});

  3. 使用返回一个元素

  JavaScript/jQuery有一个很好的特点就是可以进行方法级联,所以我们不应该破坏这个特性,始终在方法中返回一个元素。我在我的每一个jQuery插件中都遵守这一条。

  ?

1
2
3
4
5
6

$.fn.wPaint = function(settings) {
return this.each(function() {
var elem = $(this);
//run some code here
}
}

  4. 一次性代码放在主循环以外

  这一条很重要,但是常常被忽略。简单的讲,如果你有一段代码是一堆默认值,只需要被实例化一次,而不是每次调用你插件功能的时候都实例化,你应该把这段代码放在插件方法的外面。这样可以让你的插件运行的更高效,节省内存。

  ?

1
2
3
4
5
6
7
8
9
10
11
12

var defaultSettings = {
mode : 'Pencil',
lineWidthMin : '0',
lineWidthMax : '10',
lineWidth : '2' };
settings = $.extend({}, defaultSettings, settings || {});
$.fn.wPaint = function(settings) {
return this.each(function() {
var elem = $(this);
//run some code here
}
}

  你可以注意到,上面代码中的“defaultSettings”是完全在插件方法外面的,由于这些代码是在闭包里面,我们不用担心这些变量被重写。

  5. 为什么要设置 Class Prototyping

  作为你代码的血与肉,方法和函数应该放在prototype函数内。有两个原因:

  ◆ 它可以节省很多内存,因为可以不用重复创建这些方法。

  ◆ 引用一个现成的方法比重新创建一个好快很多。

  简单的说,prototype就是扩展了一个对象,为它提供方法,而不用在每一个对象中实例化这些方法。这也让你的代码更有条理和高效。一旦你习惯这种开发方式,你会发现它在你将来的项目中为你节省了很多时间。

  6. 如何设置 Class Prototyping

  设置一个 prototype 方法有两个部分。首先我们需要创建我们最初的类定义,在多数情况下这就意味着创建一个对象。这个定义包含了每一个对象实例都不同的部分。在我的Paint jQuery Plugin 插件中,我是这么写的:

  ?

1
2
3
4
5
6
7

function Canvas(settings) {
this.settings = settings;
this.draw = false;
this.canvas = null;
this.ctx = null;
return this;
}

  下面来添加全局的方法:

  ?

1
2
3
4
5

Canvas.prototype = {
generate: function() {
//generate code
}
}

  这里的关键是要让prototype的方法是通用的,但是数据是每个实例自己的,可以用“this”引用。

  7. 使用 “this” 对象

  通过使用“$this”,我们可以向别的闭包传递正确的引用。我们也可能需要向别的方法传入 $this 引用。需要注意的是, $this 这个名字是可以改的,任意的变量名都可以。

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Canvas.prototype = {
generate: function() {
//some code
var $this = this;
var buton = //...some code
button.click(function(){
//using this will not be found since it has it's own this
//use $this instead.
$this.someFunc($this);
});
},
someFunc: function($this) {
//won't know what "this" is.
//use $this instead passed from the click event
}
}

  8. 在每一个对象中保存设置

  我一直在每一个对象中保存自己的设置,然后操作它自己的设置。这样你就不用在不同的方法中传递很多参数。把这些变量放在对象中,也方便你在其他地方调用这些变量。

  ?

1
2
3
4

function Canvas(settings) {
this.settings = settings;
return this;
}

  9. 分离你的Prototype方法逻辑

  这可能是一个基本的原则。当你在犹豫是否需要提供一个方法的时候,你可以问你自己 “如果其他人要重写这个方法的话,你的代码是否能满足他的需求?”或者“别人来写这个方法有多困难?”。当然这是一个灵活性拿捏的问题。这里列出了我的Color Picker jQuery Plugin 的方法,你可以参考一下:

  ?

1
2
3
4
5
6
7
8

generate()
appendColors()
colorSelect()
colorHoverOn()
colorHoverOff()
appendToElement()
showPalette()
hidePalette()

  10. 提供 Setter/Getter 选项

  这一条不是必须的,但是我发现我所有的插件都包用到了这一条。因为它只需要一点点代码,就能为别人提供一个他可能需要的功能。

  基本上,我们只要让开发者能够设置或者获取元素已经存在的值:

  ?

1
2

var lineWidth = $("#container").wPaint("lineWidth");
$("#container").wPaint("lineWidth", "5");

  总结:以上十条基本上覆盖了jQuery插件开发的核心,并且可以作为开发的模板。有一套基本的代码可以极大的缩短你的开发时间,并且能够让你设计插件架构的时候更自信。

  希望本文所述对大家的jquery程序设计有所帮助。

时间: 2024-09-18 05:16:42

10条建议帮助你创建更好的jQuery插件的相关文章

10条建议 着手开始Web2.0实施

专家精选10条建议助你着手构建一个更动态的Web站点,跃入Web2.0时代-- 如今Web2.0的宣传铺天盖地,很难找到一个可靠的策略来让公司的网站更加动态.在这里我们给出10条建议,这些建议均来源于领先的已经铺平道路的专家和IT经理.它们将帮助你接触Web2.0,并且理解它的生产力.力量和存在的问题. 1 使用WordPress或者TypePad开始blog 这两家网站提供免费的hosting和简单的.只需要几分钟就可以掌握的工具.值得关注的还有,两家公司还出售一种公司版本的博客软件(Type

将 Web 应用性能提高十倍的10条建议

将 Web 应用性能提高十倍的10条建议 提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于历史上的最高点.如果你的网站不能及时的响应,或者你的 app 不能无延时的工作,用户会很快的投奔到你的竞争对手那里. 举一个例子,一份亚马逊十年前做过的研究可以证明,甚至在那个时候,网页加载时间每减少100毫秒,收入就会增加1%.另一个最近的研究特别强调一个事实,

<转>“人脉投资”的10条建议

谁都知道人脉很重要,所以有些人非常勤奋的"做人脉",他们往往会这样做-- 积极的参与各类线下活动,逢人就换名片.加微信. 见到名人或者重要人物必合影,而且他们还会掏出手机来给你看. 逢年过节,给所有他觉得重要的人发一条相同的祝福微信,比较有心的会在复制的时候改一下前面的名字,以示重视. 动不动喜欢拉一个微信群,名字一般叫什么"XX行业精英群",每天早晨准时在群里说早安.发心灵鸡汤. 和你聊天的时候,会本能的提及他"认识"的一些大人物.如果名字是两

10条建议帮助营销人员搭建桥梁

销售和营销之间的这种错位是由多种因素造成的,不同的用词.不一致的指标以及由来已久的不信任.它们总是隔着误解与紧张的鸿沟,彼此相望. 不管原因如何,销售和营销被设定为是彼此的对手.销售人员认为营销人员不负责任.无关痛痒;营销人员认为销售人员傲慢又懒惰.销售人员说自己从营销人员那里永远也得不到有用的信息;营销人员说销售人员忽略了自己做出的贡献.它们需要的是"夫妻疗法". 除了抱怨,我们还能做些什么呢?以下10条建议能帮助营销人员开始搭建桥梁,跨越这道鸿沟. 1.等待销售去改变是徒劳无功的.

10个精选的颜色选择器Javascript脚本及其jQuery插件

 Color picker即颜色选择器使我们在web开发中可能经常用到的组件,今天我们特意精选了10个超酷的颜色选择器实现,其中包括了javascript脚本 实现及其传说中的jQuery插件实现的颜色选择器,希望对大家工作和项目中有帮助. jQuery插件类 1. Color Picker 2. Farbtasic 3. jQuery Colors Pickers HSL javascript脚本类 4. mooRainbow 5. ColorPicker 0.9 6. ExColor (

编写出更优秀软件的 10 条建议

1.测试,测试再测试2.根据你使用的语言进行重构3.为你的方法,流程和功能编写文档,哪怕很短4.写测试文档,包括手动和自动测试5.创建自动化的UI测试6.运行复杂度分析工具,如NDepend7.你对结果不满意,请不要发布8.代码要有可读性9.不要为了更好优化而写出复杂,可读性很差的代码10.部署之前喝杯咖啡

赢得用户信任的10条建议

  在一份名为<真相.谎言与互联网>的报告中,Demosfound智囊团发现,三分之一的英国青少年无条件信任网上的任何信息,其中有15%的用户直接坦言承认他们评判一个网站是否值得信任的标准,就是网站的界面外观. 的确,网页设计的首要目标之一,就是赢取目标用户的信任.研究表明,当我们第一眼看到网页的设计的时候,甚至在阅读内容之前就已经对网站的质量有所评判,对于是否信任有了一个大致的决定. 当基本的信任建立之后,用户体验设计会将网站数据转化为知识,然后将知识转化为认知.而糟糕的用户体验设计则正好相

10条建议教你做好SEO

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 做站的都知道,文章在搜索引擎上面排名有着重要的地步,这决定了一个网站能否能够成功的标志性,在数不胜数的行业网站中,如何能够站稳本人的步伐,都用尽了各种办法来对本人的站定进行策划.推广.优化等.很多好的办法都能成功做到很好的效果,然而我们也同样忘记了以前我们常用的方法,这里我为大家讲讲我的站点所用的典范方式,不好大家别见怪,供大家参考. 首先要

IT领袖们给应届毕业生的10条建议

在毕业生们迈出象牙塔之时,他们应该听从哪些人的建议?在走向独立和自主的伟大征程中,他们该吸取哪些教训?听一听各领域成功者们的建议或许不错,这些人是富有远见的商业领导者,他们从无到有建立起自己的帝国,并都跻身世界最富有的人之列.以下是历年来多位IT领袖在毕业典礼上所做演讲的节选,我们从中提取出了可供应届毕业生采纳的建议: 苹果创始人史蒂夫·乔布斯(Steve Jobs):把每一天都当成生命中的最后一天 在我17岁的时候,我读到了一句箴言,差不多是这样的:"如果你把每一天都当作生命中的最后一天去生活