Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Суть фреймворка (https://javascript.ru/forum/events/32206-sut-frejjmvorka.html)

Lynatik 07.10.2012 16:21

Суть фреймворка
 
Добрый день.
Возникло задание написать свой js фреймворк.
Погуглил я значит, чтобы понять. Но только еще больше запутался. Как я понимаю, фреймворк- это каркас, штука, которая соединяет различные компоненты приложения.
только вот прочитал, что jQuery- это фреймворк, а я всегда думал что обычные библиотеки.
В чем вообще отличие фреймворков от библиотек и чем суть фреймворков?
И может ли кто нибудь привести код самого простого и элементарного(собственног ) фреймворка, который выполняет самую элементарную функцию- чтобы на его примере я понял?
Если кто откликнется- спасибо огромное

Your 07.10.2012 16:52

JQuery

Lynatik 07.10.2012 17:34

о_О эээ
правильно ли я понял- чтобы создать новый фреймворк- мне просто надо создать функции, которые будут выполнять какие то действия. потом создать команды, и эти комады приравнять к функция. чтобы когда в скрипте вводилась команда она уже знала заведомо, что она будет делать?(криво как то написал)
может кто приведет пример такой хоть из 5-10 строчек?

Your 07.10.2012 18:19

Для какой цели вы будете писать Framework?
Если для себя, то это должны придумать вы.

Lynatik 07.10.2012 18:44

Вроде уже более- менее разобрался с этим. спасибо за ответы

Serg_pnz 07.10.2012 19:08

Lynatik,
в вики не судьба посмотреть?))

Lynatik 07.10.2012 23:37

Serg_pnz Смотрел.что то вот пробую.я просто новичок в этом, поэтому все туго идет еще. туго, но интересно)
Возник еще вопрос. зачем фреймворк заключают во временную функцию?
(function(window) {
})(window);

Вот,к примеру, к примеру, скрипт с названием frame.js. если заключать в эту функцию, то не работает. А если не заключать, то все работает, и прямоугольник нормально закрашивается в красный.
(function(window)
{
	function IsString(selector)
	{
		return typeof(selector)=='string';
	}
	
	function o_O(selector)
	{
		//является ли селектор строкой
		var obj=IsString(selector)?document.getElementById(selector):selector;
		
		//меняем класс CSS
		obj.name=function(clname)
		{
			this.className=clname;
			return this;
		}
		
		//цвет фона
		obj.pic=function()
		{
			obj.style.backgroundColor='red';
			return this;
		}
		
		
		return obj;
	}
})(window);



А вот html с прямоугольником

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Тестирование фреймворка</title>
<script type="text/javascript" src="frame.js"></script>
</head>

<body>
<script language="javascript">
function fon()
{
	o_O('id').pic();
}
</script>
<form>
<input type="button" value="первая" onClick="fon()">

<div id="id" style="width:400px; height:300px; border:3px solid black;">
</div>

</body>
</html>

dmitriymar 08.10.2012 00:19

Цитата:

Сообщение от Lynatik
Возник еще вопрос. зачем фреймворк заключают во временную функцию?

чтобы не засорять глобальную область видимости.
в приведённом выше коде -не зачем.
ошибки в каждой строке. Я конечно понимаю, что это передранный фрамевёрк + ошибки .
копать -с какой целью расширяется, для чего методы возвращают this ....
Вобщем учить основы
С такими вопросами ещё рано думать о либах и фрамевёрках. Знания о замыканиях и прочем, судя по всему,
отсутствуют.
Цитата:

Сообщение от Lynatik
Вот,к примеру, к примеру, скрипт с названием frame.js. если заключать в эту функцию, то не работает.

Встречный вопрос-почему ,по вашему мнению, он должен работать?

Lynatik 08.10.2012 00:35

dmitriymar,
я думал возврат this нужен для того, чтобы можно было подряд несколько методов через точку указывать.
так я и учу основы. и периодически спрашиваю то, что не понимаю. нельзя в одночасье стать очень шаристым в чем-то.
спасибо Вам за критику)

dmitriymar 08.10.2012 00:37

Цитата:

Сообщение от Lynatik
я думал возврат this нужен для того, чтобы можно было подряд несколько методов через точку указывать.

так и есть. только вот, подумайте на что он указывает
Цитата:

Сообщение от Lynatik
так я и учу основы. и периодически спрашиваю то, что не понимаю. нельзя в одночасье стать очень шаристым в чем-то.

под основами я имел в виду именно основы языка,а не основы построения фрамевёрков
http://www.ozon.ru/context/detail/id/6287517/

Your 08.10.2012 11:40

<script type="text/javascript">
	function obj(val) {
		return{
			funct:function(set) {
				return{
					callback:function() {
						return val+' -> '+set;
					}
				};
			}
		};
	}
	alert(obj('Text object').funct('Funct name').callback());
</script>

tenshi 08.10.2012 17:24

суть фреймворка проще понять так:
в нормальном мире приложение используют библиотеки, в мире фреймворка библиотека использует приложения)
иначе говоря - фреймворк реализует некоторую инфраструктуру накладывающую некоторые ограничения на приложения, но взамен дающую некоторые удобства.

jquery - это конечно никакой не фреймворк.

melky 08.10.2012 17:45

Цитата:

Сообщение от tenshi (Сообщение 208843)
суть фреймворка проще понять так:
в нормальном мире приложение используют библиотеки, в мире фреймворка библиотека использует приложения)
иначе говоря - фреймворк реализует некоторую инфраструктуру накладывающую некоторые ограничения на приложения, но взамен дающую некоторые удобства.

jquery - это конечно никакой не фреймворк.

сложновато :)

попробую проще (это на грани ИМХО) :

Библиотека - сборище функций, методов, как в сундучке, направленных на решение одной задачи (не обязательно одной).

Фреймворк - каркас, на котором будет строиться приложение. Может использовать библиотеки, может реализовывать их сам.

tenshi 08.10.2012 18:40

тогда уж проще википедию процитировать) каркас предоставляющий точки расширения, реализуя которые, получаешь готовое приложение

Lynatik 09.10.2012 02:25

спасибо всем за ответы.вроде понял суть фреймворков.
Следуя критике dmitriymar сижу читаю основы, но ведь теория скучная без практики.
читал читал, так и не совсем понял насчет this.

ведь this же вызывает контекст того метода, в котором была вызвана функция. к примеру


var b;
b.col=function()
{
this.style.backgroundColor='black'; // это тоже самое, что и b.slyle.backgroundColor
}



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

function a()
{
	var b;
	b.col=function()
	{
		this.style.backgroundColor='black';
		return this;  //если тут вернуть this,
				      //то оно опять же будет возвращать b...
	}
	//и добавить еще что нибудь
	b.img=function()
	{
		this.style.backgroundImage='1.jpg';
		return this; //тут тоже возвращает b...
	}
	return b;
}

this.a=a;//будет как window.a

то, по идее, можно же вызывать a().b.col().img()

что я неправильно понимаю?

Lynatik 09.10.2012 02:46

Следуя сообщению выше,в частности, вот элементарный скрипт. пожалуйста, поругайте меня и ткните носом в баги.

(function(window){
	
function o_o(selector)
{
	var sel=selector+'';
	var id=document.getElementById(sel);
	
	id.col=function()
	{
		this.style.backgroundColor='red';
		return this;
	}
	
	id.font=function()
	{
		this.style.fontSize='100px';
		return this;
	}
	
	return id;	
}

window.o_o=o_o;	
})(window);

Dmitriyff 09.10.2012 10:26

для большего понимания что такое this пара статей с хабра
Ключевое слово this в javascript — учимся определять контекст на практике

Пять способов вызвать функцию

ну а по коду...
за чем вы делаете
var sel = selector+'';


лучше проверить является ли объект строкой и выдать ошибку, что неправильный параметр, и не дергать лишний раз DOM

если все таки искомого селектора не будет
var id = document.getElementById(sel);


id будет null и определение функций вызовет ошибку
так что перед определением надо делать проверку на null

Your 09.10.2012 11:36

"FrameWork" - значит собранный каркас для облегчения разработки или создания, какой либо модели для управления.

Как например "JQuery" библиотека содержит в себе компоненты и конкретные задачи.

Данный функционал переопределяет принципы разработки на javascript для более удобного использования и разных возможностей, без написания длинных кодов.


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