http://www.jb51.net/article/20535.htm
jQuery为开发插件提拱了两个方法,分别是:
jQuery.fn.extend(object);
jQuery.extend(object);
jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法。
jQuery.fn.extend(object);给jQuery对象添加方法。
fn 是什么东西呢。查看jQuery代码,就不难发现。
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {//....
//......
};
原来 jQuery.fn = jQuery.prototype.对prototype肯定不会陌生啦。
虽然 javascript 没有明确的类的概念,但是用类来理解它,会更方便。
jQuery便是一个封装得非常好的类,比如我们用 语句 $("#btn1") 会生成一个 jQuery类的实例。
jQuery.extend(object); 为jQuery类添加添加类方法,可以理解为添加静态方法。如:
$.extend({
add:function(a,b){return a+b;}
});
便为 jQuery 添加一个为 add 的 “静态方法”,之后便可以在引入 jQuery 的地方,使用这个方法了,
$.add(3,4); //return 7
jQuery.fn.extend(object); 对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”。jQuery类的实例可以使用这个“成员函数”。
比如我们要开发一个插件,做一个特殊的编辑框,当它被点击时,便alert 当前编辑框里的内容。可以这么做:
Java代码
$.fn.extend({
alertWhileClick:function(){
$(this).click(function(){
alert($(this).val());
});
}
});
$("#input1").alertWhileClick(); //页面上为:<input id="input1" type="text"/>
$("#input1") 为一个jQuery实例,当它调用成员方法 alertWhileClick后,便实现了扩展,每次被点击时它会先弹出目前编辑里的内容。
真实的开发过程中,当然不会做这么小白的插件,事实上jQuery提拱了丰富的操作文档,事件,CSS ,Ajax、效果的方法,结合这些方法,便可以开发出更加 Niubility 的插件。
=================
http://www.cnblogs.com/rhythmK/archive/2009/10/19/1585847.html
1.jQuery.fn.extend 是对jQuery实例对象进行扩展,不需要实例jQuery就可以使用
demo: jquery 本身并不提供 jQuery.color() 这个方法,如果我们需要对jQuery本身提供的方法进行扩展,则我们就需要是用jQuery.fn.extend(说反了)
color:function(val)
{
if(val==undefined){
return $(this).css("color");
}else{
return $(this).css("color",val);
}
}
})
$(this).color("red");//对jquery对象进行颜色设置
alert($(this).color());//获取jquery对象的颜色,并用对话框弹出
2.jQuery.extend 对jQuery类本身的扩展,可以理解为静态方法,
jQuery.extend( {
myshow:function(a,b)
{
return a+b;
}
})
调用:alert($.add(3, 4));
================
http://blog.csdn.net/rogedl/article/details/5309705
Jquery中:
1. $是Jquery的简写形式,所以,Jquey()和$()的意思是一样的;所有用$()的地方,$都可以用Jquery代替;
2. 因为不能假定$在任何环境中都是有效的,所以,插件中一般用Jquery定义,而不用$定义;、
3. 用Jquery.extend增加的函数,或者说扩展的函数,可以理解成添加类方法——用类名调用
4. 用Jquery.fn.extend增加的函数,或者说扩展的函数,可以理解成添加对象方法,即添加成员函数,用对象名调用
5. Jquery.fn=Jquery.prototype,所以,Jquery.fn是Jquery.prototype的别名;
6. 那么Jquery.prototype是什么呢? 这个牵涉到Javascript的对象生成过程,以及结构:
建立Javascript普通对象-》Javascript普通对象的constructor属性指向constructor对象,constructor对象的prototype属性指向
prototype对象,Javascript普通对象的隐藏属性_proto_指向prototype对象,具体结果图可以参考
http://yangsp1.javaeye.com/blog/499264
7. 以下代码:
var $jc = $.jcarousel;//$有一个jcarousel属性,该属性也是一个对象(摘自Jcarousel插件),并起别名为$jc
$jc.fn.extend = $jc.extend = $.extend;// $jc 的对象方法=$jc 的类方法=Jquery的类方法;
// 即扩展方法可以使用上面3个方式调用,但意义不同。
8. 代码形式:
(function($){.....})(Jquery)
//用上面的函数形式作为包裹器,把代码包含在内部,含义是:
function($){....}函数定义,有一个形式参数$;
(function($){....})(Jquery)用Jquery作为实参调用上述函数
用途:在该函数内部用$不会引起冲突,所以起到包裹器的作用。