JavaScript / jQuery中的这种设计模式是什么?

前端之家收集整理的这篇文章主要介绍了JavaScript / jQuery中的这种设计模式是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在查看 SlickGrid的JavaScript源代码.

我注意到slick.grid.js有以下结构:

(function($) {
    // Slick.Grid
    $.extend(true,window,{
        Slick: {
            Grid: SlickGrid
        }
    });

    var scrollbarDimensions; // shared across all grids on this page

    ////////////////////////////////////////////////////////////////////////////
    // SlickGrid class implementation (available as Slick.Grid)

    /**
     * @param {Node}           container   Container node to create the grid in.
     * @param {Array,Object}   data        An array of objects for databinding.
     * @param {Array}          columns     An array of column definitions.
     * @param {Object}         options     Grid options.
     **/
    function SlickGrid(container,data,columns,options) {
        /// <summary>
        /// Create and manage virtual grid in the specified $container,/// connecting it to the specified data source. Data is presented
        /// as a grid with the specified columns and data.length rows.
        /// Options alter behavIoUr of the grid.
        /// </summary>

        // settings
        var defaults = {
            ...
        };

        ...

        // private
        var $container;

        ...


        ////////////////////////////////////////////////////////////////////////
        // Initialization

        function init() {
            /// <summary>
            /// Initialize 'this' (self) instance of a SlickGrid.
            /// This function is called by the constructor.
            /// </summary>

            $container = $(container);

            ...
        }

        ////////////////////////////////////////////////////////////////////////
        // Private & Public Functions,Getters/Setters,Interactivity,etc.
        function measureScrollbar() {
            ...
        }

        ////////////////////////////////////////////////////////////////////////
        // Public API

        $.extend(this,{
            "slickGridVersion": "2.0a1",// Events
            "onScroll":                     new Slick.Event(),...

            // Methods
            "registerPlugin":               registerPlugin,...

        });

        init();
    }
}(jQuery));

为了简洁和清晰,已经省略了一些代码,但这应该给你一个总体的想法.

>以下是什么目的:(function($){// code}(jQuery));这是我看过的模块模式吗?这是否意味着保持全局命名空间清洁?
> .extend()行的意思是什么?:顶部$.extend(true,{// code});看起来像是与“命名空间”有关系;什么是命名空间?它看起来像底部的$.extend(this,{// code});用来暴露“公众”的成员和职能?你如何定义私有函数或变量?
>如果您想要,您将如何初始化多个“SlickGrids”?他们会分享多少,他们将如何互动?注意“构造函数函数:function SlickGrid(…){// code}.
>这种风格的编码有哪些书籍,链接和其他资源?谁发明了?

谢谢! ♥

解决方法

这是一个jQuery插件.

(function($){// code}(jQuery));给你一个新的函数范围,所以你的名字不会转储到全局范围.将jQuery作为$,让您可以使用$速记,即使其他Javascript库使用$.

$.extend是一种将属性从一个对象复制到另一个对象的jQuery方法.第一个真理意味着它应该是一个深而不是浅的副本.通过扩展窗口,创建新的全局属性,在这种情况下,创建Slick.

底部的$.extend(this,…)在大写的函数SlickGrid中. SlickGrid旨在用作构造函数,这将是新创建的对象,因此这种扩展是向对象添加属性.他们是公共成员.在此代码示例中,measureScrollbar是私有的:它只对该函数中定义的代码可见,而不在外部.

您可以创建一些网格:

var grid1 = new Slick.Grid(blah,blah);
var grid2 = new Slick.Grid(blah,blah);

在您显示代码中,这两个实例将共享的唯一的事情是scrollBarDimensions变量.

猜你在找的jQuery相关文章