带有默认设置和多个实例的jQuery设置

|| 我已经制作了一个jQuery插件,效果很好。除了当我在同一页面上有多个实例时,最后一个实例的选项/设置都用于这两个实例。 这是它的精简版本...很抱歉。
(function() {

    var settings = {};
    var defaults = {
        duration : 1000,
        easingShow : \'easeOutBounce\',
        easingHide : \'easeOutQuad\'
    };

    var methods = {
        init : function(options) {

            return this.each(function(n) {

                settings = $.extend(defaults, options);

            });

        },

        show : function() {

            // settings used here
        },

        hide : function() {
            // also used here
        }
    };

    $.fn.expander = 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.expander\');
        }

    };

})(jQuery);
我确定这是某种名称空间问题,因为我经常对此感到困惑。 谢谢     
已邀请:
        采用
settings = $.extend(true, {}, defaults, options);
来自jquery docs @ http://api.jquery.com/jQuery.extend/ deep如果为true,则合并将变为递归(也称为深度复制)。 target要扩展的对象。它将接收新属性。 object1一个对象,其中包含要合并的其他属性。 objectN包含要合并的属性的其他对象。   请记住,目标对象(第一个参数)将被修改,并且将从$ .extend()返回。但是,如果我们要保留两个原始对象,则可以通过将空对象作为目标来保留。 要对每个元素进行不同的设置,可以使用
.data()
将它们存储在每个元素中 查看有效的演示:http://jsfiddle.net/roberkules/XvKs8/     

要回复问题请先登录注册