jQuery.extend和jQuery.fn.extend的区别

在学习jQuery时jQuery.extend和jQuery.fn.extend这两个的区别没有搞得特别清楚,这几天趁着有点空闲时间就把这两个的区别详细的整理了以下。

jQuery为开发插件提拱了两个方法,jQuery的API手册中,extend方法挂载在jQuery和jQuery.fn两个不同对象上方法,在jQuery内部代码实现的是相同的,只是功能却不太一样。

我们先把jQuery看成了一个类,这样好理解一些。
jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法(静态方法)。
假设我们把jQuery这个类看成是动物类,能叫能吃饭能喝水能跳,现在我们用jQuery.extend这个方法给这个类拓展一个能唱歌的技能。这样的话,不论是什么动物都能继承这个技能(方法)了。
可以如下这样写着:

$.extend({
   sing: function(){
     console.log("我会唱歌!")
    }
 })

执行以下代码,就会打印‘我会唱歌!’

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <script src="jquery.min.js"></script>
  <script>
    $(function(){
      $.extend({
        sing: function(){
          console.log("我会唱歌!")
        }
      })
      $.sing();
    })
  </script>
</body>
</html>

这说明.sing()变成了jQuery这个类本身的方法(object)了。他现在能”唱歌“了。
但是吧,这个能力啊,只有代表全动物的 jQuery 这个类本身,才能用啊。
所以啊,这个扩展也就是所谓的静态方法。只跟这个 类 本身有关。跟你具体的实例化对象是没关系的。

jQuery.fn.extend(object); 对jQuery.prototype进得扩展,就是给jQuery对象添加方法。
意思就是:假设sing()是拓展的方法:$('selector').sing();
如果是这么用$.sing();是会出错的。

执行以下代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <input type="button" id="btn" value="按钮">
  <script src="jquery.min.js"></script>
  <script>
    $(function(){
      $.extend({
        sing: function(){
          console.log("我会唱歌!")
        }
      })
      $("#btn").click(function(){
        $.sing();
      })
    })
  </script>
</body>
</html>

点击按钮就会打印‘我会唱歌!’

两者区别总结:
1、两者调用方式不同:

   jQuery.extend(),一般由传入的全局函数来调用,主要是用来拓展个全局函数,如$.init(),$.ajax();
   jQuery.fn.extend(),一般由具体的实例对象来调用,可以用来拓展个选择器,例如$.fn.each();

2、两者的主要功能作用不同:

    jQuery.extend(object); 为扩展jQuery类本身,为自身添加新的方法。
    jQuery.fn.extend(object);给jQuery对象添加方法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值