• 关于$.fn


      今天看一篇文章,里面的一段代码出现了$.fn,第一次见到这样的写法,于是跑去问度娘。。。代码如下:

    $.fn.scrollUnique = function() {
        return $(this).each(function() {
            var eventType = 'mousewheel';
            // 火狐是DOMMouseScroll事件
            if (document.mozHidden !== undefined) {
                eventType = 'DOMMouseScroll';
            }
            $(this).on(eventType, function(event) {
                // 一些数据
                var scrollTop = this.scrollTop,
                    scrollHeight = this.scrollHeight,
                    height = this.clientHeight;
    
                var delta = (event.originalEvent.wheelDelta) ? event.originalEvent.wheelDelta : -(event.originalEvent.detail || 0);        
    
                if ((delta > 0 && scrollTop <= delta) || (delta < 0 && scrollHeight - height - scrollTop <= -1 * delta)) {
                    // IE浏览器下滚动会跨越边界直接影响父级滚动,因此,临界时候手动边界滚动定位
                    this.scrollTop = delta > 0? 0: scrollHeight;
                    // 向上滚 || 向下滚
                    event.preventDefault();
                }        
            });
        });    
    };

      度娘告诉我,$.fn是指jQuery的命名空间,加上fn上的方法及属性,会对jQuery实例每一个有效。

      比如,我们要扩展$.fn.abc(),即$.fn.abc()是对jQuery扩展了一个abc()方法,那么后面你的每一个jQuery实例都可以引用这个方法了。此时,你就可以这样做了:$("div").abc();

      这是我自己写的小demo,代码如下:

      HTML代码:

    <div id="点击我"></div>

      JavaScript代码:

    <script type="text/javascript">
        $(function(){
            $.fn.sayHello = function(){
                alert("Hello everyone!");
            }
            $("#div").click(function(){
                $(this).sayHello();
            });
        })
    </script>

      jQuery为开发插件提供了两个方法,分别是:

      (1)jQuery.fn.extend(object);  //给jQuery对象添加方法

      (2)jQuery.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 当前编辑框里的内容。可以这么做:


      JavaScript代码:

    $.fn.extend({ 
        alertWhileClick:function(){ 
            $(this).click(function(){ 
                alert($(this).val());
            }); 
        } 
    }); 
    $("#input1").alertWhileClick();

      $("#input1") 为一个jQuery实例,当它调用成员方法 alertWhileClick后,便实现了扩展,每次被点击时它会先弹出目前编辑里的内容。

      真实的开发过程中,当然不会做这么小白的插件,事实上jQuery提拱了丰富的操作文档,事件,CSS ,Ajax、效果的方法,结合这些方法,便可以开发出非常高大上的插件。


    知识链接:(function(){})(jQuery)详解
      1、名称:自执行匿名函数

      2、解释:包围函数(function(){})的第一对括号向脚本返回一个匿名函数,随后一对空括号立即执行返回的匿名函数,括号内为匿名函数的参数。

      3、作用:可以用它创建命名空间,只要把自己的所有代码写在这个特殊的函数包装内,那么外部就不能访问,除非你允许(在变量或函数前加上window,这样你的变量或函数就成为全局的了)。

      我们来看一个demo:

    (function(arg){
      alert(arg+100);  
    })(100);

      执行结果是:200

    总结一下:执行函数的作用主要是 匿名自动执行,代码在解释时就已经在运行了。

      

  • 相关阅读:
    Jquery前端分页插件pagination同步加载和异步加载
    Jquery前端分页插件pagination同步加载和异步加载
    jQuery实现多种切换效果的图片切换的五款插件
    jQuery实现多种切换效果的图片切换的五款插件
    HTML5在客户端存储数据的新方法——localStorage
    HTML5在客户端存储数据的新方法——localStorage
    jQuery+ localStorage 实现一个简易的计时器
    jQuery+ localStorage 实现一个简易的计时器
    浅谈移动端页面无刷新跳转问题的解决方案
    openjudge 9269:Big String超级字符串
  • 原文地址:https://www.cnblogs.com/lengyuehuahun/p/5633702.html
Copyright © 2020-2023  润新知