Как стать автором
Обновить

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

в первом примере вы скорее всего зыбыли new, или вставили лишние скобки в конце.

во втором я не догоняю, откуда вы возьмёте sportKind, если:

var periodInfo = (function(sportKind) {
var self = this;
this.sportKind = sportKind || 'football';

})(/* а вот тут-то что? */);

Первый пример — это достаточно стандартная конструкция.
Во втором, можно изменить значение параметра, не влезая внутрь кода и не создавая глобальной константы.
вы знаете, но написав
var sportKind = somevalue;
this.sportKind = sportKind;
я тоже не создам глобальной константы, и поменять его надо будет тоже только в одном месте.

Зато мы сразу видим, что именно sportKind равен somevalue, и нам для этого не надо скроллить вверх к декларации функции.
Это немного разные вещи, Вы зададите переменную которая уже не будет использована при инициализации объекта. В некоторых случаях уже заданное значение по умолчанию меняется тяжело( <input type="file"> к примеру).
Первый пример это стандартная конструкция для анонимных функций, а тут у нас объявление объекта со всеми потрохами.

Угадайте, что окажется в someComponent?
var someComponent = (function() {
return this;
})();
window/global/… etc
Вы правы, этот момент я проглядел.
почему то многие программисты или не хотят или забывают объединять данные и методы.
потому что не у всех ООП головного мозга
Обычный и очень известный шаблон замыканий. Если надо передать параметры часто делаю так:
(function() {
// приват методы
return {
// паблик методы
init: function(initObj) {
}
};
})();
объясните пожалуйста что именно делает строчка
 this.sportKind = sportKind || 'football';
Присвоение с дефолтным значением, если sportKind не передано (undefned или null ну или false разумеется), то возьмется дефолтное 'football', удобная и часто используемая в js конструкция.
ааа понял, снаружи либо передаем строку, либо ничего не передаем.
Может, для вас это и не будет откровением, но первый код можно (да и нужно) записать так, что более красивее, логичнее и производительнее:
var someComponent = {
    
prop1   'foo',
    
prop2   'bar',
    
prop3   'qaz',
    
method1 : function() {
        
// Method Code Here
    
},
    
method2 : function() {
        
// Method Code Here
    
},
    
method3 : function() {
        
// Method Code Here
    
}
};

ну и не совсем согласен с подходом, предложенным в periodInfo. мы или пишем какой-то «класс» с публичным интерфейсом, с которым работам извне если таких объектов может быть много либо, раз не хотите захламлять глобальное пространство, а все действия не выходят за пределы одного замыкания — делать все в локальной областе видимости через var, а не this.
И еще я не обнаружил определение метода self.hide_hint_box(); Вы хотите преположить, что этот метод будет объявлен где-то извне даного кода?
Кстати дельное замечание насчет локальных переменных — получаются в таком случае частные свойства.

Все методы определяются внутри, я просто не стал помещать в качестве примера весь код.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории