 
			
				31.03.2016, 19:38
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.12.2013 
					
					
					
						Сообщений: 175
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				ООП в прототипном стиле
			 
			
		
		
		
		доброго времени суток, решил перейти на прототипный стиль, в принципе с написанием проблем нет (пока), но есть вопросы насчёт производительности, начал с объекта Ajax (суть не в этом, вопрос никакого отношения не имеет к ajax), вот написал такое в прототипном стиле: 
/* === AJAX === */
function Ajax() {
	var xhr = new XMLHttpRequest();
	if (!'onload' in xhr)
		xhr = new XDomainRequest();
	this._xhr = xhr;
}
/** @param {object} options */
Ajax.prototype.request = function(options) {
	var xhr  = this._xhr;
	xhr.open('POST', options.url, true);
	xhr.setRequestHeader('X-REQUESTED-WITH', 'XMLHttpRequest');
	xhr.setRequestHeader('Content-Type', 'multipart/form-data');
	xhr.setRequestHeader('Cache-Control', 'no-cache');
	xhr.onreadystatechange = function () {
		if (xhr.readyState != 4)
			return;
		if (xhr.status == 200 && options.success)
			options.success(xhr.responseText);
	};
	xhr.send(options.data || null);
};
/**
 * @param {Node} form
 * @param {function} success
 */
Ajax.prototype.upload = function(form, success) {
	var xhr       = this._xhr,
		formData  = new FormData(form),
		indicator = getById('indicator');
	xhr.upload.onprogress = function (e) {
		indicator.style.width = Math.round(e.loaded / e.total * 100) + '%';
	};
	xhr.onload = xhr.onerror = function () {
		if (xhr.readyState != 4)
			return;
		if (xhr.status == 200)
			success(xhr.responseText);
	};
	xhr.open('POST', '/upload/', true);
	xhr.setRequestHeader('X-FILE-NAME', 'attach');
	xhr.setRequestHeader('Content-Type', 'multipart/form-data');
	xhr.setRequestHeader('Cache-Control', 'no-cache');
	xhr.send(formData);
};
ajax = new Ajax();
/* === AJAX END === */
и каждый раз когда надо буду обращаться через ajax.request или ajax.upload, это всё работает, НО, как насчёт производительности? мне кажется что объект постоянно будет висеть в памяти и может даже утечка образоваться, планирую далее все объекты таким образом сделать, но сначала хотел бы уточнит стоит ли?
 
меня больше смущает то, что лучше: один раз вызвать ajax = new Ajax() или каждый раз объявлять через new, ни один из объектов не имеет параметров, только у методов есть, так что уверенно могу объявить единожды, но как всё-таки лучше? заранее спасибо!  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2016, 20:15
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.12.2013 
					
					
					
						Сообщений: 175
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Rise, 
 ну пример у меня штучный продукт) а другие продукты нет, для них не помешала бы фабрика) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2016, 20:32
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.12.2013 
					
					
					
						Сообщений: 175
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Rise, 
 вы кажется меня не так поняли (ну или я вас не понял), вызвать приходится не один раз, но я не про методы, а про сам класс, то есть new в принципе могу один раз использовать, но так лучше, или каждый раз вызывать через new 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2016, 22:48
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.12.2013 
					
					
					
						Сообщений: 175
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Rise
			
		
	 | 
 
	| 
		в 5-й строке всегда будет ложь, к тому же если xhr = new XDomainRequest() то это IE8-9, но IE8-9 не поддерживают объекты xhr.upload и FormData, плюс при каждом new проверять излишне.
	 | 
 
	
 
 ясно, спасибо, уберу эту строку, ие8 не нужен, для ие9 думал, но ничего, для него сделаю через айфрейм
 
	
 
	
		
			Сообщение от Rise
			 
		
	 | 
 
	| 
		Tecvid, если "один раз" то новый запрос будет сбрасывать текущий незавершенный запрос.
	 | 
 
	
 
 тут можно конкретнее если не трудно, я не совсем понял, в js эта тема как-то не так как в других языках  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2016, 23:12
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.12.2013 
					
					
					
						Сообщений: 175
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Rise, 
 а в случае использования функционального стиля такого не будет? или так будет только в случае ajax? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2016, 23:49
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.12.2013 
					
					
					
						Сообщений: 175
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 ясно, значит могу и дальше так писать и единожды объявить каждый объект через new и дальше использовать его методы? 
 
насчёт кодировки, сначала был urlencoded, но в этой же статье было написано что для post можно и этот, значения не имеет, и я так поставил чтобы меньше трафика шло 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2016, 00:06
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 07.11.2013 
					
					
					
						Сообщений: 214
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Tecvid,
 
// можно
function Constructor() {
   this.property = 'property';
}
Constructor.prototype.method1 = function(){};
Constructor.prototype.method2 = function(){};
var object = new Constructor();
// а можно сразу объект присвоить
var object = {
    property: 'property',
    method1: function(){},
    method2: function(){}
};
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Rise, 01.04.2016 в 00:09.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2016, 00:10
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.12.2013 
					
					
					
						Сообщений: 175
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 а какой вариант лучше? как с точки зрения архитектуры, так и с точки зрения производительности 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2016, 00:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.12.2013 
					
					
					
						Сообщений: 175
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 ясно, спасибо, просто мне показалось что так будет не очень-то правильно для объектов с кучей методов, но похожже это не так 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2016, 00:37
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.12.2013 
					
					
					
						Сообщений: 175
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Rise, 
 аа ясно, и такие имеются, например есть Audio и Video, у них есть как свои методы, так и общие, но хоть и общие, всё же какие-то различия есть, потому у них есть общий родитель Media с общими методами, надеюсь на верном пути    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |