Javascript.RU

Javascript Class

Вариант функции для создания своих классов в JavaScript

var MakeClass = function(){
	return function( args ){
		if( this instanceof arguments.callee ){
			if( typeof this.__construct == "function" ) this.__construct.apply( this, args );
		}else return new arguments.callee( arguments );
	};
}
var NewClass = function( variables, constructor, functions ){
	var retn = MakeClass();
	for( var key in variables ){
		retn.prototype[key] = variables[key];
	}
	for( var key in functions ){
		retn.prototype[key] = functions[key];
	}
	retn.prototype.__construct = constructor;
	return retn;
}

Теперь для создания класса нам понадобиться такой код:

var MyClass = NewClass( {
	/*Список переменных*/
	"Variable1": 'I,m is variable number one!',
	"Variable2": 'I,m is variable number two!'
}, function( x, y ){/*Функция конструктор класса*/
	this.x = x;
	this.y = y;
	alert( this.Variable2 );
	this.show();
},{/*Методы класса*/
	"show": function(){
		alert( this.Variable1 );
		alert( "x = " + this.x + ", and y = " + this.y );
	},
	"increase": function( x, y ){
		this.x += x;
		this.y += y;
	}
});
var test1 = MyClass( 1, 1 );
test1.increase( 10, 20 );
test1.show();
var test2 = MyClass( 10, 10 );
test1.show();
Прикрепленный файлРазмер
class.js_.txt1.24 кб
+4

Автор: GreatRash, дата: 26 января, 2011 - 11:40
#permalink

А как реализовать приватные методы и переменные при таком подходе? И вообще в чем плюсы эмуляции классов? В наследовании?


Автор: Skipp, дата: 8 февраля, 2011 - 12:35
#permalink

Вот и у меня такой же вопрос, а зачем?


Автор: bit4ix, дата: 6 марта, 2011 - 09:25
#permalink

А чем Ваш способ лучше чем обычное описание "класса" в JS?

var class = function(arg1,arg2){

var private1=arg1
var private2=arg2;
this.public1 = 'here the public';

this.foo1 = function(){ alert('here public function call'); }
...
}

var obj = new class(5,4);


Автор: Гость (не зарегистрирован), дата: 19 марта, 2011 - 15:34
#permalink

Флэнаган в этом дальше пошёл - привёл модуль для создания классов в своей книге. Очень советую посмотреть. Там и приватные члены, и методы класса и экземпляров.
Но вопрос остаётся - зачем?


Автор: Гость (не зарегистрирован), дата: 19 марта, 2011 - 15:34
#permalink

Флэнаган в этом дальше пошёл - привёл модуль для создания классов в своей книге. Очень советую посмотреть. Там и приватные члены, и методы класса и экземпляров.
Но вопрос остаётся - зачем?


Автор: Гость (не зарегистрирован), дата: 4 мая, 2012 - 16:00
#permalink

Как зачем? А понты как же?


Автор: Cyber-Web (не зарегистрирован), дата: 14 июня, 2012 - 15:42
#permalink

Спасибо, интересно. В mootools есть нечто на подобие.


Автор: Baliy (не зарегистрирован), дата: 4 июля, 2012 - 06:42
#permalink

> Но вопрос остаётся - зачем?
На одной странице создать несколько экземпляров класса с разными значениями внутренних переменных, которые будут видеться во всех методах класса.


Автор: Tsedilin (не зарегистрирован), дата: 22 октября, 2012 - 16:55
#permalink

Вопрос зачем?
Для сайта в котором реализуются api
Например есть страница у неё два класса
1 - user - в данном классе можно хранить id пользователя, lang, ip, и много других вещей которые защищены от изменения
если же это реализоввывать через Object()

var user = {id: 1};

то очевидно что данное значение можно изменить через другой скрипт
2 - page - в данном классе можно хранить ссылки на элементы ajax loader, ajax update, так если на сайте несколько тем то очевидно что их имена div'ов id могут и не совподать.
И в таком случае если у вас есть универсальный скрипт то ему легче будет обращаться к этим элементам через два глобальных класса


Автор: Сайтмейкер (не зарегистрирован), дата: 1 июня, 2013 - 13:26
#permalink

Можно еще вот так:

function Class(obj){var c=obj._constr_;obj._constr_=undefined;c.prototype=obj;return c}

Автор: Сайтмейкер (не зарегистрирован), дата: 1 июня, 2013 - 13:28
#permalink

пример класса(такой же как и на странице)

var MyClass = Class({
	"Variable1": "I,m is variable number one!",
	"Variable2": "I,m is variable number two!",
	_constr_: function(x,y) {
		this.x = x
		this.y = y
		alert(this.Variable2)
		this.show()
	},
	"show": function() {
		alert(this.Variable1)
		alert("x = " + this.x + "and y = " + this.y)
	},
	"increase": function(x, y) {
		this.x += x
		this.y += y
	}
})

Автор: Сайтмейкер (не зарегистрирован), дата: 1 июня, 2013 - 13:31
#permalink

Немного улучшил:

function Class(obj){var c=obj._constr_;c.prototype=obj;return c}

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
4 + 2 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Другие записи этого автора
RabiatoR
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние комментарии
Последние темы на форуме
Forum