博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

jquery.fn.extend jquery.extend 插件开发

Posted on 2013-01-06 11:10  bw_0927  阅读(267)  评论(0)    收藏  举报

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(说反了)

     

复制代码
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作为实参调用上述函数

      用途:在该函数内部用$不会引起冲突,所以起到包裹器的作用。