javascript - 尝试使用 jQuery.data() API 在 jQuery 插件中缓存函数

标签 javascript jquery html jquery-plugins dom-events

请针对以下场景提出解决方案

背景(jQuery 插件):

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

和变量 Action 看起来像:

var actions = {
    init: function (options) {
        if (this.length) {
            var settings = $.extend({}, $.fn.myplugin.defaults);
            return this.each(function () {
                if (options) {
                    settings = $.extend(settings, options);
                }

                $(this).data('myplugin', new MyPlugin($(this), settings));
            });
        } else {
            throw new Error('unable to init undefined');
        }
    },
    update: function () {
        ...
    },
    destroy: function () {
        ...
    }
};

MyPlugin看起来像

function MyPlugin($el, settings) {
    var $content = $('.content', $el);

    var a = function setup() { ... };

    var b = function hold() { ... }

    $content.on({
        'click': function(e) { ... },
        'hover': function(e) { ... }
    });
}

我知道我可以将 $.cache 转储到控制台并查看 .data() 中关联的内容。

需要的问题/建议:

如果我调用像 $('myEle').myplugin('update') 这样的更新函数,那么我需要 update 函数 来改变实例的状态MyPlugin 使用 .data() API 创建和缓存。有哪些可能的方法可以做到这一点?

$('myEle').data('myplugin') 的当前结果显示 MyPlugin{},大括号之间没有任何内容。

最佳答案

这个问题与 jQuery 或 data() API 没有任何关系,这是由于对 JavaScript 中的函数、对象和构造函数的误解造成的。

这很容易在浏览器的 JavaScript 控制台中测试:

> function MyPlugin() { var a = 1; var b = 2; }
undefined
> new MyPlugin()
MyPlugin {}

> function MyPlugin() { this.a = 1; this.b = 2; }
undefined
> new MyPlugin()
MyPlugin {a: 1, b: 2}

关于javascript - 尝试使用 jQuery.data() API 在 jQuery 插件中缓存函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16067923/

相关文章:

javascript - 剑道网格 : populating with data from ajax

javascript - Dojo 的 dijit.Editor 在 Adob​​e AIR 应用程序中不可编辑?

javascript - 一起使用toLocalString和Reduce函数: toLocaleString shows NaN in display

javascript - 我如何在 AngularJS 上从 Controller 调用服务上的函数

javascript - 无法在 MVC 4 中加载超链接的图像

javascript - 页面加载事件中自调用函数的顺序 - javascript/html

html - 如何检测自定义 <li> 项目符号上的鼠标悬停?

jQuery 验证将类添加到错误元素?

jquery - Debounce 不适用于 TinyMCE 事件

asp.net - ASP.NET MVC 项目建议