为什么使用data()将函数存储在元素上?

时间:2015-06-22 22:41:48

标签: javascript jquery plugins

我正在尝试了解Swipebox插件中的一些代码。

声明了一个函数。

$.swipebox = function( elem, options ){
   // plugin Jquery codes..
}

现在这个代码我真的不明白。 这段代码的主要目的是什么?为什么它会将功能保存到元素中?

$.fn.swipebox = function( options ) {

    if ( ! $.data( this, '_swipebox' ) ) {
        var swipebox = new $.swipebox( this, options );
        this.data( '_swipebox', swipebox );
    }
    return this.data( '_swipebox' );
};

为什么不运行swipebox(this,options);?

$.fn.swipebox = function( options ) {
   $.swipebox(this, options);
};

我也不明白在声明函数时使用$ .swipebox而不是使用swipebox。

1 个答案:

答案 0 :(得分:1)

swipebox的方式可以避免声明任何新的全局变量。

他们的构造函数是$.swipebox(),他们的jQuery方法是$.fn.swipebox(),它可以作为$(".selector").swipebox(...)在jQuery对象上调用。

this.data( '_swipebox', swipebox );将swipeBox对象(由swipeBox构造函数创建)与实际DOM对象相关联,因此当DOM对象上发生任何类型的事件时,某些代码可以找到该DOM对象已存在的swipebox对象(再次没有创建任何新的全局变量来跟踪这一点)。这样,DOM对象指向swipebox对象(通过.data()关联),swipebox对象包含相关的DOM对象,因此每个对象都可以根据需要到达另一个对象。