开始看看jquery插件
$.extend和$.fn.extend区别
参考:http://www.cnblogs.com/luckboy/archive/2009/06/25/1510870.html
$.extend
1、对jQuery本身扩展,比如新增方法
$.extend({ min:function(a,b){return a >= b ? b : a} }) console.log($.min(1,4.5))
2、合并多个对象
有两个对象:
var obj1 = {"name":"robin", location:{"city":"chengdu","desc":"javaer"}} var obj2 = {"last":"robin", location:{"city":"chengdu","job":"java"}}
当$.extend(obj1, obj2)时,会将obj2有而obj1没有的属性设置到obj1上,同时会覆盖obj1中存在的属性
$.extend(obj1,obj2) console.log(JSON.stringify(obj1)); //{"name":"robin","location":{"city":"chengdu","job":"java"},"last":"robin"} console.log(JSON.stringify(obj2)); //{"last":"robin","location":{"city":"chengdu","job":"java"}}
当然也可以将合并的结果赋值到新的对象上,有两种方式,前一种obj1仍然会被修改
var nobj1 = $.extend(obj1,obj2) ; var nobj2 = $.extend({},obj1,obj2);
前一种obj1会被修改而后面的方法则不会修改obj1
写道
jQuery.extend(target,obj1,[objN])
target: 待修改的对象。
obj1:待合并到第一个对象的对象。
objN:带合并到第一个对象的对象(可选)。
target: 待修改的对象。
obj1:待合并到第一个对象的对象。
objN:带合并到第一个对象的对象(可选)。
在jQuery中,对extend方法传入的多个参数进行合并,默认将第一个参数作为target对象,会将剩下的合并在该对象上。如果第一个对象是boolean,则默认取第二个对象为target
jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; }
下面来看看第一个参数如果是boolean类型。从上面的例子我们看到,在obj1和obj2中合并的都是该对象的第一级属性,对嵌套的location都是看中一个整体去替换。当然也提供了类似"深拷贝"的方式,即可以对location属性进行合并:
var nobj1 = $.extend(true, obj1,obj2); //var nobj2 = $.extend({},obj1,obj2) ; console.log(JSON.stringify(obj1)); //{"name":"robin","location":{"city":"chengdu","desc":"javaer","job":"java"},"last":"robin"}
3、对$.extend和$.fn.extend
$.extend可理解为对jQuery的静态方法扩展,在使用时不需要实例化jQuery对象。而$.fn.extend可以理解为对jQuery添加成员方法。两者的区别可以用$.trim()和$("#id").empty()来表示。
$(function() { $.fn.extend({ alertThis: function(){ $(this).click(function(){ alert($(this).val()); }); } }) $("#idd").alertThis(); });
打完收工。感谢http://www.iteye.com/topic/545971