Объект по умолчанию для функции, если в ней не определены объекты - PullRequest
0 голосов
/ 13 июня 2011

Допустим, у меня есть следующие объекты:

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

Так что, конечно, Fxy.commands.group.add('something') будет делать то, что делает эта функция. Но что, если я позвоню Fxy.commands.group('something')? Ну, честно говоря, я не знаю, как заставить это справиться с этим. Вот что я спрашиваю: как бы я сделал объект по умолчанию для функции, если ни один объект внутри нее не вызывается? Очевидно, что приведенный выше код не будет работать, потому что у него нет функции по умолчанию, так как я даже не знаю, где он будет размещен. Если это возможно, как это будет сделано? Если нет, просто скажите так, но, пожалуйста, также предложите обходной путь.

1 Ответ

2 голосов
/ 13 июня 2011

Функции также являются объектами, поэтому вы можете назначать им свойства:

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

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

Обновление: (по запросу)

Если вы не хотитеПишите Fxy.commands.group снова и снова (что на самом деле не так уж и плохо, потому что он дает четкое представление о назначении функций), вы можете создать функцию, которая копирует свойства (например, jQuery.extend).Вот очень простая версия:

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);
...