Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   небольшой вопрос по ООП (https://javascript.ru/forum/events/28280-nebolshojj-vopros-po-oop.html)

cyber 13.05.2012 21:24

небольшой вопрос по ООП
 
я понимаю что на данный вопрос можно найти ответ в какой нибудь большой статье про ооп но уже голова не вариант больше 8 часов писал скрипт и голова не варит уже нашел 2 хороших статьи но уже буквы расплываюсь. Помогите пожалуста.
в чем суть проблемы :
делаю для нескольких скриптов свою библеотеку , покажу проблему на примере такого кода:
function mouse (e)
{
	var x, y;
if (e.pageX == "null" && e.clientX != "null")
{
	var scrollX, scrollY, body, html;
	body = document.body;
	html = document.documentElement;
	scrollX = html.scrollLeft || body && body.scrollLeft || 0;
	scrollY = html.scrollTop || body && body.scrollTop || 0;
	x = e.clientX + scrollX - (html.clientLeft || body.clientLeft || 0);
	y = e.clientY + scrollY - (html.clientTop || body.clientTop || 0);
	}	
else {
	x = e.pageX;
	y = e.pageY;
	}
	
	return {x: x , y: y}
}

вызвав функцию так mouse(event).x я получу свойство функции x.
если я напишу так
var obj ={};
obj.x = function (e) {}
obj.y = function (e) {}

то я смогу получить доступ через вызов обьекта obj и его методов x,y я получу значение x,y.
но я не хочу разделять на 2 отдельных метода возможно ли это реализовать в одном

Раед 13.05.2012 21:38

Цитата:

Сообщение от cyber
вызвав функцию так mouse(event).x я получу свойство функции

Вы получите свойство объекта, который возвращает функция
А вообще не понял, чего вы хотите. Объясните пожалуйста поподробнее

cyber 13.05.2012 21:44

возможно ли для функции mouse создать два метода х ,y в нутри функции?

vadim5june 13.05.2012 22:09

Цитата:

Сообщение от cyber (Сообщение 174277)
вызвав функцию так mouse(event).x я получу свойство функции x.

У функции нет свойств и методов-они есть только у объектов
и в данном случае это свойства объекта {x: x , y: y}
а вовсе не функции

cyber 13.05.2012 22:17

понятненько.
а вот данный код создает обьект dragMaster с методом init ?
var dragMaster = (function() {
	// private методы и свойства
	var dragObject
	
	function mouseDown(e) {
		клик на переносимом элементе: начать перенос
	}

	function mouseMove(e){
		if (dragObject) {
			отобразить перенос объекта
		}
	}
		
	function mouseUp(e){
		if (dragObject) {
			конец переноса
		}
	}

	// public методы и свойства	
	return {
		init: function() {
			// инициализовать контроллер
			document.onmousemove = mouseMove
			document.onmouseup = mouseUp
		},
		
		makeDraggable: function(element){
			// сделать элемент переносимым
			element.onmousedown = mouseDown
		}
	}
	
}())

vadim5june 13.05.2012 22:33

Цитата:

Сообщение от cyber (Сообщение 174295)
понятненько.
а вот данный код создает обьект dragMaster с методом init ?

cоздает

cyber 14.05.2012 01:06

все разобрался , все спс=)

cyber 14.05.2012 02:11

включился мозг и появилось такое решение
var mouse ={
	pos: function ()
{
	var x, y,e;
	e = event;
if (e.pageX == "null" && e.clientX != "null")
{
	var scrollX, scrollY, body, html;
	body = document.body;
	html = document.documentElement;
	scrollX = html.scrollLeft || body && body.scrollLeft || 0;
	scrollY = html.scrollTop || body && body.scrollTop || 0;
	x = e.clientX + scrollX - (html.clientLeft || body.clientLeft || 0);
	y = e.clientY + scrollY - (html.clientTop || body.clientTop || 0);
	}	
else {
	x = e.pageX;
	y = e.pageY;
	}
	
return {x : x , y: y}
	 
	
},

   x: function ()
   {
	 return mouse.pos().x;  
	   
	   },
	   
   y: function ()
   {
	 return mouse.pos().y;  
	   
	   }


};

Раед 14.05.2012 19:01

Цитата:

Сообщение от vadim5june
У функции нет свойств и методов-они есть только у объектов

Да будет вам известно, что функции - тоже объекты
function a() {
 alert('a');
}
a.x = 5;
a.y = 12;
alert('('+a.x+';'+a.y+')');

vadim5june 14.05.2012 20:10

Цитата:

Сообщение от Раед (Сообщение 174469)
Да будет вам известно, что функции - тоже объекты

Да Вы правы


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