 
			
				09.11.2011, 19:42
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.11.2011 
					
					
					
						Сообщений: 6
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Библиотека для своего сайта
			 
			
		
		
		
		Здравствуйте. 
Для сайта делаю свой тулкит - чтобы не было ничего лишнего, при этом, всё работало именно так, как надо мне... да и просто, хотелось бы понять, как это работает. Суть проста - надо, чтобы можно было работать с ней как просто используя $.function(), так и $(element).function. Как такое реализовать? Просмотрел jQuery - код слишком большой, в Гугле нашёл что-то похожее, но не работает по $(element).function. 
Спасибо. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.11.2011, 21:32
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.02.2011 
					
					
					
						Сообщений: 1,815
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Ваш вопрос понять непросто. 
Я понял так, что вам нужно что-то вроде этого
 
// создадим функцию конструктор которая будет принимать параметры и возвращать обьект
f=function(par1){
         // присвоим переданное значение, св-ву param (это же типо конструктор, должны же мы чтото присвоить :) )
         f.param=par1;  
         return f;
}
// param - это значение по умолчанию
f.param="Hello world";
// метод обьекта f
f.test =function (){
	alert (f.param);
        return this;
}
f.test2=function(){
   alert ("bla bla =" + f.param);
}
//========== проверка. =============//
// Обращение к обьекту
alert("эксперемент 1");
f.test();
alert("эксперемент 2");
// Обращение к двум функциям по цепочке
f.test().test2();
// обращение к функции
alert("эксперемент 3");
f("прощай жестокий мир").test();
// обращение к функциям по цепочке
alert("эксперемент 4");
f("прощай жестокий мир").test().test2();
P.S. Это даже близко не аналог Jquery, jquery каждый раз при обращении к $("селектор") создаёт новый обьект jquery.  
       Данный же пример работает с одним и тем же обьектом постоянно.  
		
	
		
		
		
		
		
			
				__________________ 
				Лучше калымить в гандурасе чем гандурасить на колыме
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось DjDiablo, 09.11.2011 в 22:37.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.11.2011, 14:00
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.11.2011 
					
					
					
						Сообщений: 6
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Спасибо. Я ночью начал его модифицировать под создание нового объекта (так как надо именно это), но вырубился. Сейчас продолжу. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.11.2011, 22:47
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.11.2011 
					
					
					
						Сообщений: 6
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Что-то придумал. Но, почему-то, при втором вызове - Type Error "called_non_callable". 
LaMF = function(q) {
	return new LaMF.c.init(q);
}
LaMF.c = {
	init: function(q) {
		LaMF = {
			q: "Hello World",
		
			test: function () {
				console.log(q);
			}
		};
		LaMF.q = q;
		return LaMF;
	}
}
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Vladiator, 10.11.2011 в 22:53.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.11.2011, 23:01
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.11.2011 
					
					
					
						Сообщений: 6
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
(function( window, undefined ) {
LaMF = function(q) {
	return new init(q);
}
init = function(q) {
	LaMF = {
		q: "Hello World",
	
		test: function () {
			console.log(q);
		}
	};
	LaMF.q = q;
	return LaMF;
}
window.$ = LaMF;
})( window );
Так работает.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.11.2011, 23:11
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.11.2011 
					
					
					
						Сообщений: 6
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Не работает через $ без скобок. Вроде работало... 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Vladiator, 10.11.2011 в 23:23.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.11.2011, 00:34
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.02.2011 
					
					
					
						Сообщений: 1,815
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Интересно как оно работало ? 
для того чтобы метод q появился в laMF, нужно выполнить init 
а если init выполнится он затрёт функию laMF, обьектом. 
		
	
		
		
		
		
		
			
				__________________ 
				Лучше калымить в гандурасе чем гандурасить на колыме
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось DjDiablo, 11.11.2011 в 02:51.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.11.2011, 01:26
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.02.2011 
					
					
					
						Сообщений: 1,815
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Одно из решений которые приходят в голову, это копировать свойства из LaMF в  конструктор. 
пример
 
<script>
    (function( window, undefined ) {
     LaMF = function(q) {
            // размещаем конструктор прямо внутри функции
            return new (function(q1){  
                
                    // копируем свойства из LaMF в this
                    extend (this,LaMF);
                    this.test1=q1;
            })(q)	
     }
     LaMF.test1="i test1";
     LaMF.test2="i test2";
     })( window );
</script>
естественно тебе потребуются, метод для копирования свойств, extend. Написать его придётся самим.  
		
	
		
		
		
		
		
			
				__________________ 
				Лучше калымить в гандурасе чем гандурасить на колыме
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось DjDiablo, 11.11.2011 в 02:47.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.11.2011, 01:44
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.02.2011 
					
					
					
						Сообщений: 1,815
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Лови рабочий вариант.
(function( window, undefined ) {
      // метод extend, почти аналогичен методу в jquery (не поддерживает глубокое копирование)
      function extend(target,options){
             for ( name in options ) {
                        src = target[ name ];
                        copy = options[ name ];
	
                        // если св-во уже есть, мы его не копируем
                        if ( src === copy ) {
                                    continue;
                        }
                        if ( copy !== undefined ) {
                                  target[ name ] = copy;
                        }
          }
           return target;
       }
     LaMF = function(q) {
        // размещаем конструктор прямо внутри функции
        return new (function(q1){  
                
                // копируем свойства из LaMF в this
                extend (this,LaMF);
                
                this.test1=q1;
        })(q)	
     }
     LaMF.test1="Я оригинальное свойство";
     LaMF.test2="Если ты меня видешь, значит я скопирывалось";
	window.$=LaMF;
     })( window );
// создаём новый обьект, и смотрим свойство
alert( $("Я установленное свойство" ).test1);
// смотрим свойство в оригенале
alert( $.test1 );
// проверяем доступны ли нам скопированные свойства
alert( $("бла бла").test2 );
 Ещё одно, быстродействующие решение  на прототипах. (фурычит под хром, оперу и firefox, под ie код надо модифицировать)
 
(function( window, undefined ) {
     LaMF = function(q) {
        // размещаем конструктор прямо внутри функции
        return new (function(q1){                  
                this.__proto__ = LaMF;
                this.test1=q1;	
        })(q)	
     }
     LaMF.test1="Я оригинальное свойство !";
     LaMF.test2="Если ты меня видешь, значит я скопировалось !";
	window.$=LaMF;
     })( window );
// создаём новый обьект, и смотрим свойство
alert($("Я установленное свойство !").test1);
// смотрим свойство в оригенале
alert($.test1);
// проверяем доступны ли нам скопированные свойства
alert($("1").test2);
 
		
	
		
		
		
		
		
			
				__________________ 
				Лучше калымить в гандурасе чем гандурасить на колыме
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось DjDiablo, 11.11.2011 в 02:56.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.11.2011, 18:29
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.11.2011 
					
					
					
						Сообщений: 6
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Спасибо! Так как большая часть сайта всё равно пока не работает под IE (много HTML5 и CSS3), буду использовать второй вариант. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |