jquery插件创建内部方法从另一个内部方法调用

时间:2012-06-12 09:18:27

标签: jquery function jquery-plugins each

我是jquery插件创作的新手,并想知道插件中的方法如何在同一个插件中调用另一个方法。

在示例代码中,我试图从f1调用f2,但由于f2方法中的this.each(),我有一个js错误。

你可以开导我吗?

由于

编辑:f1()和f2()可以从插件外部调用$ .pluginName('f1')和$ .pluginName('f2')。

我想要的是在f1()中的somme代码之后调用f2()。

;
(function( $ ){
    'use strict';

    var pluginName = 'pluginName';

    var defaults = {
    };

    var methods = {
        init : function( options ) {
            return this.each(function ( ) {
                var $this = $(this);
                var settings = $.extend({}, defaults, options);
                $this.data(pluginName, settings);
                return $this;
            });
        },

        f1 : function() {
            methods.f2(); // Uncaught TypeError: Object #<Object> has no method 'each' 
        },

        f2 : function() {
            return this.each(function() {

            });
        }
    };

    $.fn[pluginName] = function( method ) {
        if ( methods[method] ) {
            return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return methods.init.apply( this, arguments );
        } else {
            $.error( 'Method ' +  method + ' does not exist on jQuery.' + pluginName + '()');
        }
    };

})( jQuery );

1 个答案:

答案 0 :(得分:1)

这显示错误,因为当您从f2()调用f1()时您没有将jQuery对象传递给f2(),因此this不会引用f2()内的同一对象1}}因此它不会工作。

因此,请更改您的f1()代码

f1 : function() {
            // some code of F1
            this.css('color','red');
            // now call f2
            methods.f2.apply(this,[]); 
        },

它指定thisf2()内的含义。在这种情况下,我们传递jQuery对象。

Working Example

更多关于.apply