2016-05-02 8 views
1

Я читал через код сегмент closure library, я видел этот фрагмент кода там:практика программирования - с помощью вспомогательного метода, чтобы скрыть объект

/** 
* Gets the document object being used by the dom library. 
* @return {!Document} Document object. 
*/ 
goog.dom.getDocument = function() { 
    return document; 
}; 

Почему мы обернули ссылку на документ в методе получения? не является ли документ глобальным объектом?

+0

Таким образом, вы можете издеваться над ним (заменить метод) на тесты и предоставить поддельный документ. Или, в любое время, просто разделив базовую реализацию. – ssube

+0

@ Sushanth-- Я не понимаю, даже тогда метод вернет измененное значение не правильное, как его защита? – CodeYogi

+0

oops .. Мой плохой. Я упустил это из виду –

ответ

1

Я вижу две логические причины, как с участием Closure Compiler:

  1. проверки Тип - При вызове этой функции, Closure Compiler будет знать, что тип возвращаемого значения типа Document и что никогда не имеет значения. Предположительно разработчики Google Closure могли бы жестко закодировать это в компиляторе Closure, но, будучи явным, они избегают добавлять специальные случаи в компилятор Closure для свойств, существующих на глобальном объекте.

  2. минификация - Когда эта функция проходит через ADVANCED_OPTIMIZATIONS, goog.dom.getDocument может получить уменьшенные к чему-то вроде a.b.c. Компилятор Closure не может переименовать document, потому что он не имеет никакого контроля над именем переменной на глобальном объекте, но он может, безусловно, переименовать функции, которые ссылается наdocument, чтобы дать вам меньший исходный код.

+0

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

+0

Правильно, потому что вы не можете минимизировать «документ». Вы можете только минимизировать _reference_ на 'document', который предоставляет эта функция. – Technetium

+0

Итак, вы хотели сказать, что ключевое слово «документ» будет вообще пропущено из сжатого кода? – CodeYogi