Пытаясь лучше понять буквальный образец объекта

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, если хотите.
  • 1
    Очень хорошее объяснение ждет вас, [Нажмите здесь] [1] [1]: stackoverflow.com/questions/1600130/…
Теги:

1 ответ

0
Лучший ответ

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

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

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню