Почему этот JavaScript возражает не, выходят из объема после $ (документ) .ready?

У меня есть некоторый рабочий JavaScript, который управляет некоторыми элементами DOM. Проблема, я не понимаю, почему она работает, который никогда не является хорошей вещью. Я пытаюсь узнать больше об объектно-ориентированных лучших практиках JavaScript и JavaScript, таким образом, организация может казаться немного странной.

В основном я переношу два метода, которые управляют DOM внутри a CSContent объект. Я создаю экземпляр того объекта, content в $(document).ready и свяжите некоторые события с функциями в content. Однако я смущен относительно того, как эти функции могут все еще быть вызваны после $(document).ready выходы. Не делает это означает это content вышел из объема, и его функции не доступны? Так или иначе вот код:

function CSContent() {
    var tweetTextArea = document.getElementById('cscontent-tweet'),
        tweetTextElement = document.getElementById('edit-cscontent-cs-content-tweet'),
        charCountElement = document.getElementById('cscontent-tweet-charactercount');

    this.toggleTweetTextarea = function () {
      $(tweetTextArea).slideToggle();
    };

    this.updateTweetCharacterCount = function () {
        var numOfCharsLeft = 140 - tweetTextElement.value.length;
        if (numOfCharsLeft < 0) {
            $(charCountElement).addClass('cscontent-negative-chars-left');
        }
        else {
            $(charCountElement).removeClass('cscontent-negative-chars-left');
        }
        charCountElement.innerHTML = '' + numOfCharsLeft + ' characters left.';
    };
}



$(document).ready(function () {
    var content = new CSContent();
    //If the twitter box starts out unchecked, then hide the text area
    if ($('#edit-cscontent-cs-content-twitter:checked').val() === undefined) {
        $('#cscontent-tweet').hide();
    }

    $('#edit-cscontent-cs-content-twitter').change(content.toggleTweetTextarea);
    //Seems wasteful, but we bind to keyup and keypress to fix some weird miscounting behavior when deleting characters.
    $('#edit-cscontent-cs-content-tweet').keypress(content.updateTweetCharacterCount);
    $('#edit-cscontent-cs-content-tweet').keyup(content.updateTweetCharacterCount);
    content.updateTweetCharacterCount();
});
5
задан jergason 4 August 2010 в 19:42
поделиться