jquery插件代码怎么写( 二 )


这两个方法都接受一个参数,类型为Object 。Object对象的"名/值对"分别代表"函数或方法名/函数主体"【jQuery.fn.extend()】jQuery.fn.extend()方法用于将一个对象的内容合并到jQuery的原型,以提供新的jQuery实例方法【jQuery.extend()】jQuery.extend()方法用一个或多个其他对象来扩展一个对象,然后返回被扩展的对象jQuery.extend( target [, object1 ] [, objectN ] )例如,合并settings对象和options对象,修改并返回settings对象var settings = {validate:false,limit:5,name:"foo"};var options = {validate:true,name:"bar"};var newOptions = jQuery.extend(settings,options);console.log(newOptions);//Object {validate: true, limit: 5, name: "bar"}jQuery.extend()方法经常被用于设置插件方法的一系列默认参数function foo(options){options=jQuery.extend({name:"bar",length:5,dataType:"xml"},options);如果用户调用foo()方法的时候,在传递的参数options对象设置了相应的值,那么就使用设置的值,否则使用默认值通过使用jQuery.extend()方法,可以很方便地用传入的参数来覆盖默认值 。
此时,对方法的调用依旧保持一致,只不过要传入的是一个映射而不是一个参数列表 。这种机制比传统的每个参数都去检测的方式不仅灵活而且更加简洁 。
此外使用命名参数意味着再添加新选项也不会影响过去编写的代码,从而使开发者使用起来更加直观明了 。
3.如何写一个jquery 插件jquery插件开发模式jquery插件一般有三种开发方式:通过$.extend()来扩展jQuery通过$.fn 向jQuery添加新的方法通过$.widget()应用jQuery UI的部件工厂方式创建第一种$.extend()相对简单,一般很少能够独立开发复杂插件,第三种是一种高级的开发模式,本文也不做介绍 。
第二种则是一般插件开发用到的方式,本文着重讲讲第二种 。插件开发第二种插件开发方式一般是如下定义$.fn.pluginName = function() { //your code here}插件开发,我们一般运用面向对象的思维方式例如定义一个对象var Haorooms= function(el, opt) { this.$element = el, this.defaults = { 'color': 'red', 'fontSize': '12px', 'textDecoration':'none' }, this.options = $.extend({}, this.defaults, opt)}//定义haorooms的方法haorooms.prototype = { changecss: function() { return this.$element.css({ 'color': this.options.color, 'fontSize': this.options.fontSize, 'textDecoration': this.options.textDecoration }); }}$.extend({}, this.defaults, opt)有{}主要是为了创建一个新对象,保留对象的默认值 。
$.fn.myPlugin = function(options) { //创建haorooms的实体 var haorooms= new Haorooms(this, options); //调用其方法 return Haorooms.changecss();}调用这个插件直接如下就可以$(function() { $('a').myPlugin({ 'color': '#2C9929', 'fontSize': '20px' });})上述开发方法的问题上面的开发方法存在一个严重的问题,就是定义了一个全局的Haorooms,这样对于插件的兼容等等各个方面都不好 。万一别的地方用到了Haorooms,那么你的代码就悲催了!现在我们把上面的代码包装起来,用一个自调用匿名函数(有时又叫块级作用域或者私有作用域)包裹,就不会出现这个问题了!包括js插件的开发,也是一样的,我们用一个自调用匿名函数把自己写的代码包裹起来,就可以了!包裹方法如下:(function(){})()用上面的这个包裹起来,就可以了 。
但是还有一个问题,当我们研究大牛的代码的时候,前面经常看到有“;”,那是为了避免代码合并等不必要的错误 。例如,我们随便定义一个函数:var haoroomsblog=function(){}(function(){ })()由于haoroomsblog这个函数后面没有加分号,导致代码出错,为了避免这类情况的发生,通常这么写!;(function(){ })()把你的插件代码包裹在上面里面,就是一个简单的插件了 。