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)
Да будет вам известно, что функции - тоже объекты

Да Вы правы

Раед 14.05.2012 20:20

Цитата:

Сообщение от vadim5june
Но(в вашем примере) как обратиться изнутри функции a к свойству x?

function a() {
 alert(arguments.callee.x);
}
a.x = 5;
a.y = 12;
a();

Сергей1980 09.08.2013 14:50

Цитата:

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

У функций есть и свойства и методы.
Навскидку:
Метод передачи функции - по значению ByVal и по ссылке ByRef
А из свойств так навскидку могу сказать, что функция по своим свойствам
может быть обязательной (по умолчанию) либо необязательной (Optional).

Это вечный холивар, декларация пользовательских функций, либо создание классов. Один фиг ИМХО, кто как привык,так и работает.


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