七、穿插call、apply方法的一点理解,作用都是调用一个对象的方法,一个对象替换另一个对象。Call(thisObj,[arg1],[arg2],[arg3],[argN]),Apply(thisObj,[]),所以在传入参数有区别call传入的是一个参数列表,apply传入的是一个参数数组同时可以把arguments对象传入。若没有指定thisObj参数,则global作为this指向对象,相当于java中method.invoke(obj,args)。
arguments对象封装的参数列表
八、插件事件,对于插件绑定事件的最佳实践是,对绑定的事件指定命名空间,这样做的原因是比如你对多个元素绑定了相同的一种类型的事件,在解除绑定事件的时候可能会把其他元素绑定的事件也给解除掉,造成莫名其妙的问题,意思也就是使解除事件的操作更加安全,避免对其他绑定有相同事件的元素也解除事件绑定。而具体的绑定命名事件事件是只在事件后加上.namespace如($(“div”).bind(“click.toolTip”)) ;
init: function(options){ // 位置jQuery函数链,在调用处可以继续以链式的方式进行操作 return this.each(function(){ // methods.reposition指定的是一个回调函数 $(window).bind('click.toolTip', methods.reposition) }); }, destroy: function(options){ return this.each(function(){ $(window).unbind('click.toolTip'); }); }, // 事件触发后调用的函数 reposition: function(options){ //alert("tigger the resize event"); $("#e").html(Math.random() + "--" + o.someVal); }
九、data()方法这个也是让我很纠结的一个方法,官方文档的说法是:在日常的开发中开发者需要维护和检查插件(plugin)是否被初始化,而最佳实践就是将所有的变量放到一个对象字面量(literal)中,使用jQuery的data方法进行状态的追踪。
十、
判断一个输入值是否为数字isNaN($(this).val())或str.test(/^\d(\.\d)?$/)
十一、总结
对于一些常用的功能可以抽象成一个插件,在以后的工作中就可以直接调用
(1)时刻要记住将你的闭包中(function($){})(jQuery)
(2)在插件的直接范围中即上一条的闭包中不用使用$(this)来包裹this关键字,因为this关键字指向的就是jQuery对象
(3)在插件的方法中要时刻返回this关键字,这样的做的目的是维持jQuery的链式操作
(4)为了避免在调用插件方法是要传入所有的插件可以在插件中设置默认值,在方法调用处指定值对默认值进行复写