Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не могу добавить в прототип функцию (https://javascript.ru/forum/events/28492-ne-mogu-dobavit-v-prototip-funkciyu.html)

oooZinka 21.05.2012 22:31

Не могу добавить в прототип функцию
 
упростил как смог.

Помогите пожалуйста не могу понять некоторых нюансов с 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();

oooZinka 22.05.2012 00:08

Пришлось сделать все топорным способом. из-за присваивания к событию readystatechange функции с выполнением кода, использовать там уже this невозможно.
Для решения задачи создал внутри приложения глобальную переменную для объекта window, чтобы можно было внутри функции ajax complete работать с данными внутри приложения.
Это полнейший говнокод, все должно работать как и надо в ООП. Решение пока не нашел и возможно уже не хватит сил, целые сутки сижу над кодом маюсь.


Часовой пояс GMT +3, время: 09:37.