Можно ли получить имя экземпляра объекта внутри самого объекта?
Я создал свой класс, который создает 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, время: 20:10. |