jquery开发插件的两个方法
jQuery.fn.extend()
jQuery.extend()
浅拷贝
只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
改变旧对象的值,新对象的值也会改变
深拷贝
会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原 对象。
浅拷贝
jQuery.extend()
扩展 jQuery 类本身,为jQuery类添加类方法(静态方法)
jQuery.extend({
add: function(a, b) { alert(a + b); }
});
jQuery.add(10,20); //30
jQuery.extend(true,object, object1, [objectN] )
用一个或多个其他对象来扩展一个对象,返回被扩展的对象
true:是否深度拷贝不写默认为false(浅拷贝)
object:要拷贝的对象
object1:要拷贝的新对象
var obj = { name: 'Alice', age: 25, career: "teacher" };
var object = { name: 'Bruce', career: "doctor" };
jQuery.extend(obj, object); //obj = { name: 'Bruce', age: 25, career: "doctor" }
jQuery.fn.extend()
把对象挂载到 jQuery 的 prototype
属性,来扩展一个新的 jQuery 实例方法,也就是通过这个 extend
添加的新方法,实例化的 jQuery 对象都能使用,因为它是挂载在 jQuery.fn
上的方法
jQuery.fn = jQuery.prototype
对jQuery.fn
的扩展,就是为jQuery类添加成员函数,jQuery类的实例可以使用这个成员函数。
jQuery.fn.extend({
clickFunc: function() {
$(this).click(function(){
alert($(this).val());
});
}
});
$("#input1").clickFunc(); //输出文本框的文本
两者区别
jQuery.extend()
是为jQuery类添加类方法(静态方法),需要通过jQuery类来调用(直接使用 $.xxx 调用);
jQuery.fn.extend()
是为jQuery类添加成员函数(实例方法),所有jQuery实例都可以直接调用(需要使用 $().xxx 调用)。