【问题标题】:Object default to a function if no objects within are defined如果没有定义对象,则对象默认为函数
【发布时间】:2011-06-13 19:48:03
【问题描述】:

假设我有以下对象:

Fxy.commands={
    group:{
        add:function(msg){

所以,当然,Fxy.commands.group.add('something') 将执行该函数所做的任何事情。但是,如果我打电话给Fxy.commands.group('something') 怎么办?好吧,老实说,我不知道如何让它处理它。这就是我要问的:如果没有调用对象中的对象,我将如何使对象默认为函数?显然上面的代码不起作用,因为它没有默认功能,因为我什至不知道它会放在哪里。如果可能,将如何实现?如果没有,请直接说出来,但也请提出解决方法。

【问题讨论】:

    标签: javascript function object default hierarchy


    【解决方案1】:

    函数也是对象,因此您可以为它们分配属性:

    Fxy.commands = {
        group: function(msg) {}
    };
    
    Fxy.commands.group.add = function(msg){};
    

    更新:(根据要求)

    如果你不想一遍又一遍地写Fxy.commands.group(这实际上并没有那么糟糕,因为它明确了函数的分配位置),你可以创建一个复制属性的函数(如@987654321 @)。这是一个非常基本的版本:

    function extend(A, B) {
        for(var prop in B) {
            if(B.hasOwnProperty(prop)) {
                A[prop] = B[prop];
            }
        }
    }
    

    那么你可以这样做:

    var funcs = {
         add: function(){},
         remove: function(){},
         ...
    };
    
    extend(Fxy.commands.group, funcs);
    

    【讨论】:

    • 为了简单起见,是否也可以为group 中的每个新对象使用Fxy.commands.group:{add:function(){}} 而不是Fxy.commands.group.add=function(){}
    • 你能逃脱group: function() { this.add = function () { ... } }吗?或者这会引用 Fxy 吗?
    • @Jimmy:不,因为你会覆盖group。您可以创建一个函数,该函数接受两个对象并将对象 A 的所有属性分配给对象 B(如果您不想一直写 Fxy.commands.group.xyz)。
    • @g.d.d.c: this 在这种情况下将引用Fxy.commands,所以不,这不起作用。每当调用 group 时,它也会重新分配函数,我认为这是不希望的。
    • @Felix Kling 你能举个例子吗?我不擅长其他任何事情。
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 2013-07-25
    • 2021-06-28
    • 2018-03-06
    • 2018-09-25
    • 2011-06-17
    相关资源
    最近更新 更多