2014-01-22 4 views
0

В функции init объекта myFeature ниже находится строка $.extend(myFeature.config, config). Мой фон заставляет меня задаться вопросом, почему строка не $ .extend (this.config, config)? Не будет этот ссылается на родительский объект в теле функции?Попытка лучше подставить объект буквального рисунка

Если это не так, я думаю, что хотел бы использовать шаблон раскрывающего модуля, если я его хорошо понимаю, потому что я могу сделать var self = this; и ссылайтесь на себя по всем свойствам myFeature. Я не понимаю, как в шаблоне объектного литерала свойство init имеет доступ к функции myFeature внутри этой функции. Похоже, что myFeature во всем мире охвачена, и все его свойства и сам по себе могут быть доступны любому пользователю в любое время, я знаю, что это характер JavaScript, и я немного понимаю, но я думаю, что раскрывающий модульный шаблон даст мне доступ к частным/общедоступным, что делает я лучше спал ночью.

var myFeature = { 
    config : { 
     wrapper : '#myFeature', 
     container : 'div', 
     urlBase : 'foo.php?item=' 
    }, 

    init : function(config) { 
     $.extend(myFeature.config, config); 
     $(myFeature.config.wrapper).find('li'). 
      each(function() { 
       myFeature.getContent($(this)); 
      }). 
      click(function() { 
       myFeature.showContent($(this)); 
      }); 
    }, 

    buildUrl : function($li) { 
     return myFeature.config.urlBase + $li.attr('id'); 
    }, 

    getContent : function($li) { 
     $li.append(myFeature.config.container); 
     var url = myFeature.buildUrl($li); 
     $li.find(myFeature.config.container).load(url); 
    }, 

    showContent : function($li) { 
     $li.find('div').show(); 
     myFeature.hideContent($li.siblings()); 
    }, 

    hideContent : function($elements) { 
     $elements.find('div').hide(); 
    } 
}; 

$(document).ready(function() { myFeature.init(); }); 
+0

вы можете использовать this.config, если хотите. – dandavis

+1

Очень хорошее объяснение ждет вас, [Нажмите здесь] [1] [1]: http://stackoverflow.com/questions/1600130/javascript-advantages-of-object-literal – HarshSharma

ответ

0

Интересно, почему $.extend(myFeature.config, config) не $.extend(this.config,config)? Не будет ли this ссылаться на родительский объект в теле функции?

Да, так как вы вызываете его с myFeature.init() он будет работать - см how this works. Тем не менее, вы можете раздоры для безопасности - по явно отсылая к myFeature это также позволит

$(document).ready(myFeature.init); 

Я не понимаю, как в объекте буквального шаблон свойство инициализации имеет доступ к myFeature внутри функции. Кажется, myFeature во всем мире охвачена, и все его свойства и сам по себе могут быть доступны любому пользователю в любое время.

Да. Переменная myFeature находится в глобальной области видимости и может быть даже перезаписана совершенно другим объектом. Модель модуля повторной обработки будет иметь переменную self с локальным областью, которая не может быть обработана.

Я имею в виду выявления шаблон модуля даст мне личный/публичный доступ, что делает меня лучше спать по ночам

Да. Если вам это нравится, вы должны его реализовать :-)

Смежные вопросы