Преимущество использования префикса 'окна' в JavaScript

К сожалению, CSS Zen-Garden больше не может использоваться в качестве примера хорошего дизайна HTML/CSS. Фактически все их недавние проекты используют графику для заголовка раздела. Эти графические файлы определяются в CSS.

Следовательно, веб-сайт, цель которого состоит в том, чтобы показать преимущество хранения дизайна из содержания, теперь регулярно фиксирует ОТВРАТИТЕЛЬНЫЙ ГРЕХ помещения содержания в дизайн. (Если заголовок раздела в файле HTML должен был измениться, отображенный заголовок раздела не был бы).

, Который только идет, чтобы показать, что даже те защищают строгий DIV & религия CSS, не может следовать их собственным правилам. Можно использовать это в качестве инструкции в том, как тесно Вы следуете за ними.

8
задан Protector one 17 July 2009 в 15:33
поделиться

7 ответов

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

Использование префикса окна полезно, если у вас есть другая переменная в области видимости, которая скроет элемент, который вы, возможно, захотите получить из окна. Вопрос в том, всегда ли вы знаете, когда это может произойти? Ответ - нет. Так следует ли всегда ставить префикс window? Как бы вы выглядели, если бы сделали это. Некрасиво. Поэтому не делайте этого, если не знаете, что вам нужно.

7
ответ дан 5 December 2019 в 07:59
поделиться

Получено из Google ( http://www.techotopia.com/index.php/JavaScript_Window_Object ):

Объект окна является объектом верхнего уровня иерархия объектов. Таким образом, всякий раз, когда метод или свойство объекта упоминается в сценарии без имени объекта и префикса точки, JavaScript предполагает, что он является членом объекта окна. Это означает, например, что при вызове метода окна alert () для отображения диалогового окна предупреждения окно. префикс не является обязательным. Следовательно, следующие вызовы методов достигают того же результата:

window.alert ()
alert ()

Однако я прочитал, но у меня не было времени проверить следующее: ( http://www.javascriptref.com/reference/object.cfm?key=20 )

Однако есть одно место, где вам нужно быть осторожным, - это обработчики событий. Поскольку обработчики событий привязаны к Document, свойство Document с тем же именем, что и свойство Window (например, open), маскирует свойство Window. По этой причине вы всегда должны использовать полное «окно». синтаксис при обращении к свойствам окна в обработчиках событий.

4
ответ дан 5 December 2019 в 07:59
поделиться

Это полезно при попытке проверить значения глобальных объектов. Например, если GlobalObject не определен, это вызывает ошибку:

if(GlobalObject) { // <- error on this line if not defined
    var obj = new GlobalObject();
}

, но это не вызывает ошибки:

if(window.GlobalObject) { // Yay! No error!
    var obj = new GlobalObject();
}

Аналогично:

if(globalValue == 'something') // <- error on this line if not defined
if(window.globalValue == 'something') // Hurrah!

и:

if(globalObj instanceof SomeObject) // <- error on this line if not defined
if(window.globalObj instanceof SomeObject) // Yippee! window.prop FTW!

Я не ожидал, что видите значительную разницу в производительности, и единственная другая причина, по которой вы можете это сделать, - убедиться, что вы действительно получаете значение из глобальной области (в случае, если значение было переопределено в текущей области).

9
ответ дан 5 December 2019 в 07:59
поделиться

Что касается производительности, Я думаю, что AnthonyWJones справился с этим.

Одно из применений префикса окна - явно сделать что-то доступным за пределами текущей области. Если вы писали код в самозапускающейся функции, чтобы избежать загрязнения глобальной области видимости, но внутри было что-то, что вы действительно хотели сделать глобально доступным, вы могли бы сделать что-то вроде следующего:

(function(){
    function foo(){
        //not globally available
    }
    function bar(){
        //not globally available        
    }
    window.baz = function(){
        //is globally available
        foo();
        bar();
    };
})();
1
ответ дан 5 December 2019 в 07:59
поделиться

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

0
ответ дан 5 December 2019 в 07:59
поделиться

Это имеет значение только в том случае, если вы используете фреймы и выполняете кучу вызовов javascript по фреймам, и даже тогда только определенные сценарии гарантируют необходимость явной ссылки на window .

0
ответ дан 5 December 2019 в 07:59
поделиться

Когда вы используете префикс, вы явно указываете, что используете «глобальное» определение переменной, а не локальное. (Я не уверен, можно ли / как вы можете вставлять переменные в область видимости в JS, за исключением странности с this и встроенными обработчиками событий.) YMMV, вы можете либо предпочесть ясность, либо найти, что это просто беспорядок.

0
ответ дан 5 December 2019 в 07:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: