1

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

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

你能启发我吗?

谢谢

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

我想要的是在 f1() 中的某些代码之后调用 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 );
4

1 回答 1

2

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

所以像这样改变你的f1()代码

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

它指定了thisinside 的含义f2()。在这种情况下,我们传递的是 jQuery 对象。

工作示例

更多关于.apply

于 2012-06-12T09:43:25.690 回答