zoukankan      html  css  js  c++  java
  • JavaScript | JQuery插件定义方法

    参考 http://www.2cto.com/kf/201507/417874.html

    —————————————————————————————————————————————————————————

    插件开发- 两种

    类级别 - 三种

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

    • 添加全局函数
    $.foo1 = function() {
        // code
    }
    $.foo2 = function(param) {
        // code
    }
    $.foo1();
    $.foo2(1);
    • 使用jQuery.extend(object)添加全局函数 ;

      禁止使用js的函数名和变量名 , 但仍有可能与其他jquery插件冲突 , 所以使用下面的方式封装到另一个命名空间中

    $.extend({
        foo1: function() {
            // code
        },
        foo2: function() {
            // code
        }
    });
    • 采用命名空间的方式封装全局函数
    $.myPlugin = {
        foo1: function() {
            // code
        },
        foo2: function(param) {
            // code
        }
    }
    $.myPlugin.foo1();
    $.myPlugin.foo2(1);

    对象级别

    jQuery.fn.extend(object);jQuery对象添加方法。

    jquery本身是一个封装好的类;

    $("#myDiv")会生成一个jquery类的实例;

    通过jQuery.fn.extend可以对jquery.prototype进行扩展,jquery类添加成员函数,所有的jquery类实例都可以使用这个成员函数

    • 普通形式

      定义了一个jQuery函数,jQuery实参传递进去并立即调用执行;

      好处是在写jQuery插件时也可以使用$这个别名,不会与prototype冲突;

      metisMenu侧边栏下拉插件也是以这种形式写的

      p.s.尽量在自调用函数前加分号,见文章底部细节说明

    (function($) {
        $.fn.pluginName = function() {
            // code
        }
    })(jQuery);
    $("#mydiv").pluginName();
    • 分解代码为多个函数而不增加命名空间

      将函数制定为属性,我们已经声明pluginNamejquery属性对象;

      任何其他的属性或函数需要暴露出来时,都可以在pluginName函数中被声明属性;

    • 接受options参数控制插件的行为
    (function($) {
        $.fn.pluginName = function(option) {
            var defaults = {
                background: "yello",
                foreground: "red"
            };
        }
        var opts = $.extend(defaults, options);
        // plugin code
    })(jQuery);
    $("#mydiv").pluginName({
        foreground: "blue"
    });
    • 暴露插件的默认设置
    $.fn.pluginName = function(options) {
        var opts = $.extend({}, $options);
    };
    $.fn.pluginName.default = {
        foreground: "red",
        background: "yellow"
    };
    • 样例
    $.fn.extend({
        plugin: function() {
            $(this).click(function() {
                // click event code
            });
        }
    });
    $("#input1").plugin();
    <input id = "input1" type = "text" / >

    —————————————————————————————————————————————————————————

    细节

    开头使用分号

    加引号是为了防止多个js文件合并(脚本压缩)后运行异常,但由于目前(2015.4)普遍基于语法解析来进行压缩(UglifyJs),并不是必须的了,但通常作为分号教条;详解见 https://www.zhihu.com/question/29526862

    ;(function($, window, document, undefined) {
        // code
    })(jQuery, window, document);

  • 相关阅读:
    解决Xcode 7编译错误:does not contain bitcode
    iOS无处不在详解iOS集成第三方登录(SSO授权登录无需密码)
    iOS- 如何集成支付宝
    99.Recover Binary Search Tree
    101.Symmetric Tree
    108.Convert Sorted Array to Binary Search Tree
    242.Valid Anagram
    292.Nim Game
    872.Leaf-Similar Trees
    HDU-1390 Binary Numbers
  • 原文地址:https://www.cnblogs.com/hughdong/p/7324661.html
Copyright © 2011-2022 走看看