jQuery.fn.extend与jQuery.extend到底区别在哪?

正文:

其实说白了,从两个方法本身就能看出来端倪。

我们先把jQuery看成了一个类,这样好理解一些。

jQuery.extend(),是扩展的jQuery这个类。

假设我们把jQuery这个类看成是人类,能吃饭能喝水能跑能跳,现在我们用jQuery.extend这个方法给这个类拓展一个能唱歌的技能。这样的话,不论是男人,女人,xx人.....等能继承这个技能(方法)了。

我们这样写:


1

2

3

4

5

jQuery.extend({

    liu: function(){

        alert(‘liu‘);

    }

});

然后:$.liu();这样就能打印出来”liu“这个字符串

测试代码如下:

<!doctype html>
<html lang="zh-cmn-Hans-CN">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript" src="jquery-2.1.1.js"></script>
    <script type="text/javascript">
    ;(function($) {
        $.extend({
            liu: function(){
             alert(‘liu‘);
        }
    });
    })(jQuery);
    </script>
    <script type="text/javascript">
    $(document).ready(function() {
        $.liu();
    });

    </script>
</head>
<body></body>
</html>

这说明啥啊,这说明.liu()变成了jQuery这个类本身的方法(object)嘛。他现在能”唱歌“了。

但是吧,这个能力啊,只有代表全人类的 jQuery 这个类本身,才能用啊。你个人想用,你张三李四王五麻六,你个小草民能代表全人类嘛?

所以啊,这个扩展也就是所谓的静态方法。只跟这个 类 本身有关。跟你具体的实例化对象是没关系滴。

我们再看看jQuery.fn.extend()这个方法。

从字面理解嘛,这个拓展的是jQuery.fn的方法。

jQuery.fn是啥玩意呢?

源码里是这么写的:


1

2

3

4

jQuery.fn = jQuery.prototype = {     

      init: function( selector, context ) {//….   

      //……     

   };  

哦,原来jQuery.fn=jQuery.prototype,就是原型啊。

那就一目了然了,jQuery.fn.extend拓展的是jQuery对象(原型的)的方法啊!

对象是啥?就是类的实例化嘛,例如


1

$("#abc")

这个玩意就是一个实例化的jQuery对象嘛。

那就是说,jQuery.fn.extend拓展的方法,你得用在jQuery对象上面才行啊!他得是张三李四王五痳六这些实例化的对象才能用啊。

说白了就是得这么用(假设xyz()是拓展的方法):


1

$(‘selector‘).xyz();

你要是这么用$.xyz();是会出错误滴。

例子源码如下:

<!doctype html>
<html lang="zh-cmn-Hans-CN">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript" src="jquery-2.1.1.js"></script>
    <script type="text/javascript">
    ;(function($) {
        $.fn.extend({
            liu: function(){
             alert(‘liu‘);
         }
    });
    })(jQuery);
    </script>
    <script type="text/javascript">
    $(document).ready(function() {
        $(‘div‘).liu();
    });

    </script>
</head>
<body>
    <div></div>
</body>
</html>

和上边的区别区别一目了然吧?

其实吧,jQuery.extend()这个方法,主要是用来拓展个全局函数啦,例如$.ajax()这种,要不就是拓展个选择器啦,例如$.fn.each(),当选择器用。

大部分插件都是用jQuery.fn.extend()。

差不多就这样吧,这是我的个人理解,若是各位看客有更佳的看法,欢迎提出来。

本文地址:http://www.cnblogs.com/liu-l/p/3928373.html

时间: 2024-08-28 13:21:58

jQuery.fn.extend与jQuery.extend到底区别在哪?的相关文章

jQuery插件开发及jQuery.extend函数详解和jQuery.fn与jQuery.prototype区别

一.jQuery插件开发分为两种:  1.类级别: 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery.extend(object); $.extend({ add:function(a,b){return a+b;} , minus:function(a,b){return a-b;} }); var i = $.add(3,2); var j = $.minus(3,2); 2.对象级别: 对

jQuery.extend()、jQuery.fn.extend()扩展方法详解

jQuery自定义了jQuery.extend()和jQuery.fn.extend()方法.其中jQuery.extend()方法能够创建全局函数或者选择器,而jQuery.fn.extend()方法能够创建jQuery对象方法. 例如: jQuery.extend({ showName : function(name){ alert(name) } }); jQuery.showName("深蓝"); jQuery.extend()除了可以创建插件外,还可以用来扩展jQuery对象

jQuery.extend()、jQuery.fn.extend()扩展方法示例详解

jQuery自定义了jQuery.extend()和jQuery.fn.extend()方法. 其中jQuery.extend()方法能够创建全局函数或者选择器, 而jQuery.fn.extend()方法能够创建jQuery对象方法. 例如: 复制代码代码如下: jQuery.extend({ showName : function(name){ alert(name) } }); jQuery.showName("深蓝"); jQuery.extend()除了可以创建插件外,还可以

全面认识jQuery.fn,菜鸟总结

今天想做树形导航栏,查找了资料,找到了一个框架,比较小所以研究其中的代码,发现第一句话就把我难住了,主角是——jQuery.fn. 在此,再次停住,只好继续找资料,现在整理下自己所理解到的知识. 一,jQuery.fn是什么       答:从jqurey源代码,如下小段: Java代码   jQuery.fn = jQuery.prototype = { constructor: jQuery, init: function( selector, context, rootjQuery ) {

jQuery中attr和prop方法的区别

相比attr,prop是1.6.1才新出来的,两者从中文意思理解,都是获取/设置属性的方法(attributes和properties).只是,window或document中使用.attr()方法在jQuery1.6之前不能正常运行,因为window和document中不能有attributes.prop应运而生了. 之前看网上对比两者的文章,更是列出一个表来区分什么标签下使用prop,什么标签下使用attr,原谅我是懒惰的人,最害怕要背的东西,所以只有自己想想办法了. 既然我们想知道他们两的

[JS]jQuery中attr和prop方法的区别

相比attr,prop是1.6.1才新出来的,两者从中文意思理解,都是获取/设置属性的方法(attributes和properties).只是,window或document中使用.attr()方法在jQuery1.6之前不能正常运行,因为window和document中不能有attributes.prop应运而生了. 之前看网上对比两者的文章,更是列出一个表来区分什么标签下使用prop,什么标签下使用attr,原谅我是懒惰的人,最害怕要背的东西,所以只有自己想想办法了. 既然我们想知道他们两的

jQuery 中 attr() 和 prop() 方法的区别&lt;转&gt;

前几天,有人给 Multiple Select 插件 提了问题: setSelects doesn't work in Firefox when using jquery 1.9.0 一直都在用 jQuery 1.8.3 的版本,没有尝试过 jQuery 1.9.0 的版本. 于是,开始调试代码,在 1.9.0 的版本中: <input type="checkbox" /> <script> $(function() { $('input').click(fun

使用jQuery.fn自定义jQuery翻页插件

第一次写jQuery插件.自己感觉写的也不怎么样.写jQuery插件利用的就是这个东东 jQuery.fn,例如 jQuery.fn.pluginName=function(){}; 这个是我写的分页插件的样子 插件通过一个外放的函数来进行翻页操作,无论是点击前进.后退.还是改变页面大小,都会调用该函数. 先看看插件的代码结构 (function ($) { //存放插件所需的属性字段 var PagerFields = { }; //插件的私有函数 function setImageButto

Jquery源码中的Javascript基础知识(四)— jQuery.fn.init方法

$() 即调用了jQuery.fn.init方法 jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); } 下面是init方法代码: 1 init: function( selector, context, rootjQuery ) { 2 var match, elem; 3 if ( !selector ) { 4 return this; 5

jQuery源代码学习之六——jQuery数据缓存Data

一.jQuery数据缓存基本原理 jQuery数据缓存就两个全局Data对象,data_user以及data_priv; 这两个对象分别用于缓存用户自定义数据和内部数据: 以data_user为例,所有用户自定义数据都被保存在这个对象的cache属性下,cache在此姑且称之为自定义数据缓存: 自定义数据缓存和DOM元素/javascript对象通过id建立关联,id的查找通过DOM元素/javascript元素下挂载的expando属性获得 话不多说,直接上代码.相关思路在代码注释中都有讲解