Не могу добавить в прототип функцию
упростил как смог.
Помогите пожалуйста не могу понять некоторых нюансов с prototype. Вот файлы JS (суть проблемы): app.js
window.Application = function(){
this.ajax = new function(){
//...
this.send = function(type,url,data,request){
this._axobject.open(type,url,true);
this._axobject.onreadystatechange = function(){
try {
if (this.readyState == 4){
if (this.status == 200){
request(this.responseText);
}else{
console.error('По запросу "'+url+'" ошибка: '+this.statusText);
}
}
}catch(e){
console.error(e.message);
}
}
this._axobject.setRequestHeader('If-Modified-Since','Sat, 1 Jan 2000 00:00:00 GMT');
this._axobject.send(data);
}
}
//...
this.include = function( name, url, reload ){
//...
this.ajax.send('GET',url,null,function(data){
eval(data);
//...
});
}
}
var app = window.app = new Application();
app.include('app.hash', '/templates/includes/js/app.hash.js');
app.hash.js
window.app.prototype.hash = function( string ){
// Создание простого hash из строки,
// Чтобы в будущем создавать хеш путей в ключах массива
return hash;
}
Проблема в том, что при создании приложения (класса) я не могу с помощью eval( 'тут код файла app.hash.js' ) прикрепить функцию в приложение. Выводит ошибку Cannot set property 'app.hash' of undefined ajax.send._axobject.onreadystatechange Пытался сделать все проще с помощью jQuery.getScript, но не вышло, уже не помню какая была ошибка, просматривал исходный код jQuery сломал себе мозг излишком информации и решил написать свою функцию httprequest для получение скрипта и выполнения его в eval() который можно найти в функции Application.include(); |
Пришлось сделать все топорным способом. из-за присваивания к событию readystatechange функции с выполнением кода, использовать там уже this невозможно.
Для решения задачи создал внутри приложения глобальную переменную для объекта window, чтобы можно было внутри функции ajax complete работать с данными внутри приложения. Это полнейший говнокод, все должно работать как и надо в ООП. Решение пока не нашел и возможно уже не хватит сил, целые сутки сижу над кодом маюсь. |
| Часовой пояс GMT +3, время: 07:33. |