Как достучаться до функции внутри объекта?

  • Автор темы Автор темы master_x
  • Дата начала Дата начала

master_x

Pitavale XXI wieku
Как достучаться до функции внутри объекта?

Есть javascript:

PHP:
function Hello()
{
    var Name='nobody';
    
    this.setName=function(name){
         Name=name;
    }
    
    this.hello_init=function(){
         this.setName('Pitaval');
         alert('Hello '+Name);    
    }
}

var msg=new Hello();
window.onload=msg.hello_init;

код расписал для того, чтобы понятно было :)
Вопрос: код как вы сами уже догадались не рабочий ;) А все дело в this.setName('Pitaval'). Так вот каким образом обратиться к методу класса, если this занят, т.е. указывает на объект, который вызвал событие?
Пока отделался добавив внутри Hello переменную Nspace=this;
Теперь вызов setName выглядит так: Nspace.setName('Pitaval'). Чую, что не правильно... Буду рад комментариям.
 
код станет работоспособным, если ты добавишь msg.hello_init "()" ;)

вообще так, как ты написал реализуются закрытые члены в js, с чем тебя и поздравляю.
если хочешь обращаться к Name вне кода класса - замени var Name на this.Name.
 
Nirva
к членам класса я хочу обращаться в одном из методов класса. Не за его пределами. А насчет скобок, так ведь мы на событие вешаем указатель на функцию?

Вопрос остался прежним.
 
объясню. ты немного заблуждаешься в логике.
если на событии в качестве обработчика висит ссылка (т.н. reference call) функция и должна быть обработчиком события, вне всякого объекта. проще говоря согласно логике твой код должен бы был выглядеть как
Код:
...
function  init() {
    msg = new Hello();
    msg.hello_init();
}

window.onload = init;

в твоем же случае более логичней делать именно вызов
Код:
window.onload = msg.init()

если для тебя такая логика остается неочевидной, использование внутренней ссылки (Nspace) совершенно правильно.
 
конечно будет. код выполнится точно так же, как если бы он был вне события.
 
Тогда буду смотреть в эту сторону, спасибо за помощь и объяснения.
 
Как вариант:
PHP:
function Hello() 
{ 
    var Name='nobody'; 
     
    this.setName=function(name){ 
         Name=name; 
    } 
     
    this.hello_init=function(){ 
         this.setName('Pitaval'); 
         alert('Hello '+Name);     
    } 

    this.hello_init_handler=function(handler){
        var this_ = this;
        return function () {this_.hello_init};
    }
} 

var msg=new Hello(); 
window.onload = msg.hello_init_handler();

PS. Как мне кажется,
PHP:
window.onload = msg.init()
можно спокойно сократить до
PHP:
msg.init()
:)
 
Сверху