1) this тут как минимум не обязателен, не вижу смысла пихать все в объект, если ты потом пользуешься разве что this.layer
2) close может получить доступ к layer
следующим образом:
function a() {
var layer = ...;
function b() {
// здесь можно использовать layer
}
}
3) если делаешь "класс", то лучше методы в прототип добавлять, при твоем подходе для каждого объекта будет создаваться своя функция
function msg(){ ... }
msg.prototype.method1 = function() { ... }
4) с помощью document.createElement можно создать внешний контейнер, а все содержимое добавить с помощью innerHTML
5) getDocumentWidth, getDocumentHeight можно вынести из объекта (функции), это скорее функции общего назначения. Кроме того, какой-то там нестандартный способ определения размеров. Можешь посмотреть, как в
некоторых фреймворках поступают
6) внутри атрибута this указывает на соответствующий элемент. Можно этот div создать с помощью createElement и назначить обработчик через свойство onclick