(Частичное) расширение «функций» в javascript?

#javascript

#javascript

Вопрос:

У меня есть этот код…

 var my = {    
    helpers: {        
        getName: function() {
            return 'John Doe';
        }       
    }    
}

// in another file...

var my = {    
    helpers: {        
        getAge: function() {
            return '40';
        }       
    }    
}

// Test...

$("#myDiv").html(my.helpers.getName   " "   my.helpers.getAge);
 

http://jsfiddle.net/MojoDK/8cmV7/

… но getName не определено.

Я надеялся, что javascript был достаточно умен, чтобы объединить его с этим…

 var my = {    
    helpers: {        
        getName: function() {
            return 'John Doe';
        },
         getAge: function() {
            return '40';
        }
    }    
}
 

Как мне расширить метод (или как он называется), как указано выше? У меня есть несколько «вспомогательных» файлов, которые необходимо «объединить».

Ответ №1:

Избыточность хороша для этого:

 my = window.my || {};
my.helpers = my.helpers || {};
my.helpers.getAge = function() {
    return 40;
};
 

Демонстрация этого в действии

Комментарии:

1. Да, это работает… единственное, что раздражает, это то, что VS2013 intellisense видит только «getAge» — есть идеи, почему intellisense VS не видит оба?

2. Мой bad -VS теперь видит это нормально. Не знаю, почему этого не было раньше. Спасибо миллион!

Ответ №2:

Вы также можете использовать http://api.jquery.com/jquery.extend

как в:

 var my = {
    getName: function() {}
};
$.extend(my, {
    getAge: function() {
    }
});
 

Демонстрация: http://jsfiddle.net/7KW3H /

Комментарии:

1. NoDV, но отвечать на вопрос, который не помечен jQuery, с помощью jQuery — плохая идея. Смотрите также Это

2. @NiettheDarkAbsol хотя я согласен, что тег отсутствует, OP использует jQuery в своем примере. Я не говорю, что он должен использовать jQuery.

3. Ну, поскольку я новичок в этом, я хотел бы знать все мои варианты, будь то js или jquery.

4. Хотя нельзя отрицать, что этот код, безусловно, будет работать, меня это беспокоит, потому что бесполезно неэффективно делать что-то в jQuery, когда то же самое в JavaScript так легко доступно 🙂

5. Оба примера работают нормально, хотя пример NiettheDarkAbsol работает всегда, независимо от порядка файлов; jquery.extend работает только после объявления переменной my . Это единственный недостаток, который я могу придумать. Хотя я должен сказать, что код jquery выглядит чище.