如何在JavaScript中委派给对象数组

扎克

我有对象与方法的阵列abc,和d我想用这些相同的方法创建一个“委托”对象,这些方法只是在数组中的每个对象上调用相应的方法。下面我目前的解决方案似乎有不必要的重复(即,函数的定义abc,和d几乎是一样的。这也将是很好,如果我没有记住我每次添加一个时间的方法添加到委托对象“委托”对象的方法有没有更好的方法来准备委托对象?

Delegator = (function () {
    "use strict";

    var objectList = [];

    var callOnAll = function(functionName, args) {
        objectList.forEach(function(logger) {
            logger[functionName].apply(logger, args);
        });
    };

return {
   add : function (handler) { objectList.push(handler); };

   a: function() { callOnAll('a', arguments); };
   b: function() { callOnAll('b', arguments); };
   c: function() { callOnAll('c', arguments); };
 };
}());

我知道__noSuchMethod__; 但是,这似乎是非标准的。

JLRishe

这是一种更动态的方法,不需要您事先知道方法名称:

var Delegator = (function () {
    "use strict";
    var objectList = [];

    var callOnAll = function(functionName, args) {
        objectList.forEach(function(logger) {
            if (typeof logger[functionName] === 'function') {
                logger[functionName].apply(logger, args);
            }
        });
    };
    
    function addMethods(handler) {
        Object.keys(handler).forEach(function (key) {
            if (!(key in obj) && typeof handler[key] === 'function') {
                obj[key] = function () { callOnAll(key, arguments); };
            }
        });
    }           

    var obj = {
       add : function (handler) { 
           objectList.push(handler); 
           addMethods(handler);
       }
    };

    return obj;
}());

Delegator.add({
    a: function () { console.log('called a()!'); },
    b: function () { console.log('called b()!'); }
});

Delegator.add({
    a: function () { console.log('called a()!'); },
});

Delegator.a();
Delegator.b();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Python中将所有方法调用委派给C#DLL

在python中委派@classmethods

正确地将请求委派给内部对象

如何将DNS委派给单独的AWS账户?

如何将实施委派给Kotlin中的某个物业?

如何在 Reference Outlets 中委托 mapView

如何在对象Javascript数组内过滤数组对象?

如何在JavaScript中创建对象数组?

如何在Javascript中列出对象数组?

如何在Javascript中创建数组对象

如何在Javascript中过滤对象数组

如何在JavaScript中打印对象数组?

如何在javascript中创建对象数组

如何在javascript中创建对象数组?

如何在javascript中声明对象数组?

如何在javascript中使用对象数组

从自动递增列中委派值

在Kotlin中,如何委派给接口并仅提供无参数的公共构造函数?

如何基于RequestHeaderAuthenticationFilter将身份验证管理器委派给特定的CustomUserDetailsService?

如何在JavaScript中将数组对象更改为嵌套对象

如何在JavaScript中将对象数组转换为对象?

如何在 JavaScript 中声明具有对象数组的对象?

如何在javascript中foreach数组到数组对象

使用Relay将片段委派给孩子

Ansible:委派给时更改python interpeter

如何在对象数组的嵌套数组中获取数组对象javascript

如何使用Java将线程委派给多个服务器并跟踪哪个线程位于哪个服务器上

如何在Javascript中将数组转换为对象?

如何在javascript中使用数组和对象