Можно ли получить имя экземпляра объекта внутри самого объекта?
Я создал свой класс, который создает DIV и IFRAME, в общем имитация всплывающего окна. Хотелось бы сделать так, чтобы на этом всплывающем окне при создании его, добавлялась кнопка(ну или сссылка) для закрытия этого окна.
Тоесть у объекта есть метод close(), который его закрывает. Все методы у меня работают, окно создается и сама функция close() тоже работает верно, вопрос не как их реализовать, а как сделать так, чтобы кнопка или ссылка, по клику на которой добавлялась именно в функции создания "окна", т.к this.close() тут не прокатит, а надо вызывать метод из конкретного экземпляра объекта. МОжно ли как либо внутри класса получить имя экземпляра объекта? create() { //...... //создается DIV и IFRAME //....... //а здесь добавим ссылку, по которой окно должно закрыться var tmp = this.div.innerHTML; this.div.innerHTML = "<a onclick=close()>Закрыть[X]</a>" + tmp; } в приведенном мною псевдокоде видим onclick=close(). Но тут будет ошибка, т.к close() - это метод объекта. this.close() тут тоже не сделаешь. Пока что мне приходит в голову только после создания экземпляра объекта передавать этому экземпляру его имя как строку както так: create(instName) { ...... var tmp = this.div.innerHTML; this.div.innerHTML = "<a onclick=" + instName + ".close()>Закрыть[X]</a>" + tmp; } но хотелось бы чтобы при использовании класса не надо было заботиться о том чтобы передавать имя объекта, а как то получить его внутри метода create(). Или, возможно есть какое то другое решение данной проблемы? Буду признателен за любую помощь |
Один из вариантов
create() { var self = this; // ... var a = document.createElement('A'); a.onclick = function() { self.close(); } // ... } |
Kolyaj,
Firebug пишет: self.close is not a function |
Весь код покажите.
|
ModalWindow = function() { var div, transpDiv; var isShowed; var iframe; var frmBody; var self; this.isShowed = false; } ModalWindow.prototype = { createDiv: function(width,height,content) { if(!this.isShowed) { var bodyWidth, bodyHeight; if (self.innerHeight) { // all except Explorer bodyWidth = self.innerWidth; bodyHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode bodyWidth = document.documentElement.clientWidth; bodyHeight = document.documentElement.clientHeight; } else if (document.body) {// other Explorers bodyWidth = document.body.clientWidth; bodyHeight = document.body.clientHeight; } this.div = document.createElement('DIV'); this.div. className = "ModalBox"; this.div.style.left = (bodyWidth/2)-(width/2) + 'px'; this.div.style.top = '100px'; this.div.style.width = width; document.body.appendChild(this.div); this.self = this; var a; a = document.createElement('A'); a.innerHTML = "Закрыть[X]"; this.div.appendChild(a); a.onclick = function() { self.closeMessage(); } this.iframe = document.createElement('iframe'); this.iframe.src = content; this.iframe.frameBorder = "no"; this.iframe.scrolling = "no"; this.iframe.style.height = height + 'px'; this.iframe.style.width = width + 'px'; this.div.appendChild(this.iframe); this.transpDiv = document.createElement('DIV'); this.transpDiv.className = "transparentLayer"; this.transpDiv.style.left = "0px"; this.transpDiv.style.top = "0px"; this.transpDiv.style.width = '100%'; this.transpDiv.style.height = '100%'; document.body.appendChild(this.transpDiv); isShowed = true; } } , closeMessage: function() { this.div.style.display='none'; this.transpDiv.style.display='none'; this.isShowed = false; } } |
Цитата:
Цитата:
|
Цитата:
this.self = this; или тут чтото неверно? этот кусок кода: var bodyWidth, bodyHeight; if (self.innerHeight) { // all except Explorer bodyWidth = self.innerWidth; bodyHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode bodyWidth = document.documentElement.clientWidth; bodyHeight = document.documentElement.clientHeight; } else if (document.body) {// other Explorers bodyWidth = document.body.clientWidth; bodyHeight = document.body.clientHeight; } вообще убрал - результат такой же |
Вам нужно сохранить this, а вы сохраняете его в него же. Просто var self = this;
|
|
спасибо, теперь все получилось!!
|
Часовой пояс GMT +3, время: 22:01. |