Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.11.2010, 19:08
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

Создание конструктора ("класса")
Стандартный способ, самый простой и понятный.
var clssX = function() {
	alert(this.text); // show "Text"
	};

clssX.prototype.text = 'Text';
var objX = new clssX();


мой конструктор класса.

var rr = {
	new_class: function() {
		var oc = Object.prototype.constructor;
		function cn(){}; // null constructor

		function clss(c) {
			return function(a1,a2,a3) {
				var x = c.parent, l, m, u;

				if (typeof x === 'function') {
					x.apply(this, arguments);
					};

				if (c.factory) {
					switch(l = arguments.length){ // for fast
						case 0: x = c.factory(this); break;
						case 1: x = c.factory(this, a1); break;
						case 2: x = c.factory(this, a1, a2); break;
						case 3: x = c.factory(this, a1, a2, a3); break;

						default:
							for(m = [this]; x = l--;) m[x] = arguments[l];
							x = c.factory.apply(c, m);
						};

					if (x !== u) return x;
					};
				}
			};


		return function(c) {
			if (c) {
				var p = c.parent, i, s, u;

				if (p = p && p.prototype) {
					cn.prototype = p;
					p = new cn;

					if (s = c.prototype) {
						for(i in s) if (s[i] !== u) p[i] = s[i];
						c.prototype = p;
						};
					};

				s = c.constructor;
				if (!s || s === oc) s = clss(c);

				if (p = c.prototype) s.prototype = p;

				if (i = c.interface) s.prototype[i === true ? 'interface' : i] = c;
				s.interface = c;

				return s;
				}
			}
		}(),


	newTemplate: function() {
		var c = function(){}, cp = c.prototype, ie=!(function(i) {for(i in {constructor:1}) return 1})(), s = !{}.__proto__;

		return function(p) {
			c.prototype = p || cp;
			var x = new c, l = arguments.length, i = 1, n, e;
			if (!s) {x.__proto__ = p; c.prototype = x; x = new c};

			while(i < l) {
				if (e = arguments[i++]) {
					for (n in e)
						if (e.hasOwnProperty(n))
							c[n] = e[n];

					if (ie && e.hasOwnProperty(n = 'constructor'))
						c[n] = e[n];
					};
				};

			return x;
			}
		}()
	};


пример как использую:

var clssA = rr.new_class({
	constructor: function() {
		alert(this.text); // show "Text"
		},

	prototype: {
		text: 'Text'
		}
	});


var clssB = rr.new_class({
	parent: clssA,
	constructor: function() {

		alert(this.text+': '+this.value); //show "Text: bla bla bla"
		},

	prototype: {
		value: 'bla bla bla'
		}
	});


var clssC = rr.new_class({
	factory: function(obj) {
		alert(obj.A + this.B); // show (20)
		},

	prototype: {
		A: 12
		},

	B: 8
	});


var clssD = rr.new_class({
	parent: clssA,
	factory: function(obj) {
		alert(obj.text +": "+obj.X); // show "Text: eeeeee ee ee"
		},

	 prototype: {
		X: "eeeeee ee ee"
		}
	});


var itE, clssE = rr.new_class(itE = {
	interface: true,
	constructor: function() {
		alert(this.interface.value); // show "test"
		},

	value: 'test'
	});

var clssF = rr.new_class(itE = {
	interface: 'obj_config',
	constructor: function() {
		alert(this.obj_config.value); // show "test"
		},

	value: 'test'
	});



var objA = new clssA(); // show "Text"
var objB = new clssB(); //show "Text: bla bla bla"
var objD = new clssC(); //show "Text" and show "Text: eeeeee ee ee"


alert(clssE.interface == itE); // show true


иногда нужно сразу создать обьект у которого определенный протатип:

var objN = rr.newTemplate(prot, {
	AAA: 1,
	BB: 2
	});
__________________
лучшая rss читалка zzreader.com

Последний раз редактировалось vflash, 01.11.2010 в 22:20.
Ответить с цитированием
  #2 (permalink)  
Старый 01.11.2010, 20:27
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Мб назвать не new_class, а newСlass?
И не newTemplet, а newTemplate?

Последний раз редактировалось B~Vladi, 01.11.2010 в 20:31.
Ответить с цитированием
  #3 (permalink)  
Старый 01.11.2010, 21:56
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

B~Vladi, спасиб поправлю на newTemplate.
а вот newСlass мне както не нравиться внешне как выглядит. какбы сливается и неприметным становиться.
__________________
лучшая rss читалка zzreader.com

Последний раз редактировалось vflash, 01.11.2010 в 22:20.
Ответить с цитированием
  #4 (permalink)  
Старый 01.11.2010, 22:06
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Ну ты уж определись с наименованием переменных. Один стиль - хороший тон.
Ответить с цитированием
  #5 (permalink)  
Старый 01.11.2010, 22:24
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

всегда есть исключения)
__________________
лучшая rss читалка zzreader.com
Ответить с цитированием
  #6 (permalink)  
Старый 02.11.2010, 00:04
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Не тот случай, имхо. А вообще в JS нет классов, так что лучше придумай этому другое название
Ответить с цитированием
  #7 (permalink)  
Старый 02.11.2010, 00:25
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

так я и написал "класс".
__________________
лучшая rss читалка zzreader.com
Ответить с цитированием
  #8 (permalink)  
Старый 02.11.2010, 10:20
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

А для чего такое бывает нужно в природе? Ну, там, иерархическое меню, или сортировка таблицы, или скрыть-отобразить сноски, или валидация формы?.. Можете показать какие-нибудь рабочие примеры?
Ответить с цитированием
  #9 (permalink)  
Старый 02.11.2010, 10:22
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от stopkran
Можете показать какие-нибудь рабочие примеры?
http://dev.sencha.com/deploy/dev/examples/
Ответить с цитированием
  #10 (permalink)  
Старый 02.11.2010, 11:05
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,571

а тут на форуме нет, чтобы в закладки себе бросить, или в памятку какую? А то у меня уже путаница неимоверная в ссылках ...
Пробовал "подписаться на тему", но что то это не то.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание скрипта! Создание диктанта для учеников! Елизавета Работа 10 30.06.2010 21:00
Создание копий объекта - обязателен ли prototype? heh131 Общие вопросы Javascript 12 15.05.2010 12:55
Ext.Window - создание Semeon ExtJS 4 23.12.2009 21:30
Повторное создание iframe Smoke Events/DOM/Window 7 07.02.2009 15:14
Создание элементов createElement в IE. Phoenix Общие вопросы Javascript 6 26.09.2007 19:43