javascript - 如何在 JavaScript 中优雅地将函数分配给多个对象属性

标签 javascript jquery

JavaScript 专业人士您好!

我正在努力提高我的 JavaScript 知识,并想问您以下代码片段最优雅的重写是什么,该代码片段动态地将函数分配给多个对象属性。

我正在使用 jQuery,但我也很欣赏非 jQuery 解决方案。欢迎简短易读的解决方案!谢谢!

$.fn.feedback.events = function () {
    var events = ['reset', 'success', 'error', 'warning'],
        r = {};
    $.each(events, function (_, ev) {
        r[ev] = function (evt, msg) {
            $.fn.feedback.displayFeedback(evt.delegateTarget, evt.type, msg);
        };
    });
    return r;
}();

通过上面的代码片段,我想替换以下结构,这可能是最可读的解决方案,但是嘿,我们是程序员而不是作家。 :)

$.fn.feedback.events = {
    reset: function (evt, msg) {
        $.fn.feedback.displayFeedback(evt.delegateTarget, evt.type, msg);
    },
    success: function (evt, msg) {
        $.fn.feedback.displayFeedback(evt.delegateTarget, evt.type, msg);
    },
    error: function (evt, msg) {
        $.fn.feedback.displayFeedback(evt.delegateTarget, evt.type, msg);
    },
    warning: function (evt, msg) {
        $.fn.feedback.displayFeedback(evt.delegateTarget, evt.type, msg);
    }
}

最佳答案

它们都是相同的函数,因此无需为每个函数创建一个新函数:

(function () {
    var events = ['reset', 'success', 'error', 'warning'];

    $.fn.feedback.events = {};

    $.each(events, function (_, ev) {
        $.fn.feedback.events[ev] = display;
    });

    function display (evt, msg) {
        $.fn.feedback.displayFeedback(evt.delegateTarget, evt.type, msg);
    }

}());

关于javascript - 如何在 JavaScript 中优雅地将函数分配给多个对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25234811/

相关文章:

javascript - 每 x 秒从远程服务器重新加载一次图像,而不重新加载整个页面

javascript - 使用 js (jquery) 查找所有 youtube 链接

php 正则表达式函数无法转换 JavaScript 参数

javascript - Typeahead.js - 特殊字符返回为 "æ"等

javascript - 动态列表中的匿名函数传递相同的参数值

javascript - 下拉列表显示/隐藏 div 的值并保持其状态

javascript - php返回的隐藏字段设置正确,但使用jquery获取值时为 'undefined'

javascript - 我需要一个选择内部链接的快捷方式才能使用此功能

javascript - 松散地搜索关联数组是否存在嵌套元素

javascript - d3.js 代码仅渲染节点而不渲染链接。还需要一种向节点和链接添加文本的方法