Проблема в том, что в вашем обработчике кликов значение this
больше не является исходным объектом, а скорее кнопкой, на которую нажали кнопку., но оборачивание создания этого объекта в функцию было бы простым, родным способом решить эту проблему:
function getMyClass(){
var self = new Class({
initialize: function(){
this.sayHi();
},
sayHi: function(){
alert('Hello World!');
},
addButton: function(){
this.hiButton = new Element('a', {
id: 'sayhi',
html: 'Hi!',
href: 'javascript:void(0);',
events: {
click: function(){
self.sayHi();
}
}
}).inject($('myDiv'));
}
});
return self;
}
А затем
var myClass = getMyClass();
EDIT
Хотя вышеприведенное является довольно стандартной идиомой в JavaScript, мне сказали, что оно не очень хорошо работает с MooTools.Если это так, я бы пошел с этим (как уже упоминалось в другом ответе):
var myClass = new Class({
initialize: function(){
this.sayHi();
},
sayHi: function(){
alert('Hello World!');
},
addButton: function(){
var self;
this.hiButton = new Element('a', {
id: 'sayhi',
html: 'Hi!',
href: 'javascript:void(0);',
events: {
click: function(){
self.sayHi();
}
}
}).inject($('myDiv'));
}
});