2015-03-26 3 views
0

Я просто глядя на код в бутстраповских modal.js и у меня есть следующие трудности:понимание bootstrap.js декларация переменной

bootstrap Modal.js code : 

    var Modal = function (element, options) { 
    this.options    = options 
    this.$body    = $(document.body) 
    this.$element   = $(element) 
    this.$dialog    = this.$element.find('.modal-dialog') 
    this.$backdrop   = null 
    this.isShown    = null 
    this.originalBodyPad  = null 
    this.scrollbarWidth  = 0 
    this.ignoreBackdropClick = false 

} 

В моем коде я сделал следующее:

var Modal = function(element , options){ 
    this.options = options 
    this.$body = $(document.body) 
    this.$element = $(element) 
    this.isShown = null 
    this.scrollbarWidth = 0 
    this.$backdrop = 
    } 

Произошла ошибка (см. Последнюю переменную), поэтому я изменил свой код следующим образом:

var Modal = function(element , options){ 
    this.options = options 
    this.$body = $(document.body) 
    this.$element = $(element) 
    this.isShown = null 
    this.$backdrop = 
    this.scrollbarWidth = 0 
    } 

И все работало fi ne, почему произошла ошибка? Я получаю SyntaxError в консоли.

Мой раздел Проблема: Посмотрите, как this.$body определяется в плагине, она определяется следующим образом:

this.$body = $(document.body) 

Теперь, если я пытаюсь делать this.$body = $(body) ошибка генерируется. Зачем?

+2

ваш '$ backdrop' не быть назначен ни к чему! theres нет правой стороны '=' –

+0

, что недопустимо javascript. –

+0

более ранняя версия bootstrap modal.js, имела та же декларацию. –

ответ

1

Обратите внимание, что в вашем коде у вас нет ; окончания строки. Это справедливо, хотя и не рекомендуется.

Говорит, что это:..

вар модального = функция (элемент, опционы) { this.options = опции это $ тела = $ (document.body) этот элемент $ = $ (элемент) это.. IsShown = нуль this.scrollbarWidth = 0 это $ фон = }

является не действует Javascript, потому что вы и не назначая ничего this.$backdrop

Хотя это:

var Modal = function(element , options){ 
    this.options = options 
    this.$body = $(document.body) 
    this.$element = $(element) 
    this.isShown = null 
    this.$backdrop = 
    this.scrollbarWidth = 0 
    } 

действителен, поскольку интерпретатор js анализирует последние строки как

this.$backdrop = this.scrollbarWidth = 0

это действительный.

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


2-Й ПРОБЛЕМА

body является неопределенной переменной, поэтому $(body) выдает сообщение об ошибке.

body является собственностью document, которая является переменной в глобальном масштабе.

, так как вы ссылаетесь на document.body, вы не получаете ошибок.

В качестве альтернативы вы можете получить доступ к телу страницы с помощью JQuery с помощью

$('body')

+0

документа в глобальном масштабе, да! это имеет смысл! Спасибо . –

2

Это не полное заявление:

this.$backdrop = 

Это ошибка синтаксиса. Вы не можете просто оставить оборванный = там, где ничего нет в правой части задания.

Причина ваш второй пример работы:

this.$backdrop = 
this.scrollbarWidth = 0 

происходит потому, что больше не висячей =. Теперь вы написали:

this.$backdrop = this.scrollbarWidth = 0 

который совершенно применим. a = b = 0 - это то же самое, что и b = 0; a = 0;.

JavaScript использует точки с запятой для разделения операторов, а не символов новой строки. Однако, когда вы опускаете точки с запятой, автоматическая точка с запятой (ASI) берет верх и помещает точки с запятой, где им нужно перейти к разграниченным операторам.

Правила, в которых вставлены точки с запятой, на самом деле очень прямолинейны, и JavaScript никогда не будет добавлять его, когда он представит синтаксическую ошибку (в частности, JavaScript будет смотреть, заканчивается ли строка в двоичном операторе и выполняется ли следующая строка является допустимым операндом). Итак, ваш рабочий пример, две строки анализируются как одно выражение.

В случае вашего разбитого например, нет никакого способа, чтобы вставить точку с запятой, чтобы сохранить это:

// ... 
    this.$backdrop = 
} 

С или без запятой, то это будет ошибка синтаксиса.

+0

https://github.com/twbs/bootstrap/blob/16479e9051614696df3d21acd9d482018da17045/js/modal.js –

+0

@AlexanderSolonik Итак, что? Я объяснил это в своем ответе – meagar

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