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();
 
	
	 | 
А как реализовать приватные методы и переменные при таком подходе? И вообще в чем плюсы эмуляции классов? В наследовании?
Вот и у меня такой же вопрос, а зачем?
А чем Ваш способ лучше чем обычное описание "класса" в 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);
Флэнаган в этом дальше пошёл - привёл модуль для создания классов в своей книге. Очень советую посмотреть. Там и приватные члены, и методы класса и экземпляров.
Но вопрос остаётся - зачем?
Флэнаган в этом дальше пошёл - привёл модуль для создания классов в своей книге. Очень советую посмотреть. Там и приватные члены, и методы класса и экземпляров.
Но вопрос остаётся - зачем?
Как зачем? А понты как же?
Спасибо, интересно. В mootools есть нечто на подобие.
> Но вопрос остаётся - зачем?
На одной странице создать несколько экземпляров класса с разными значениями внутренних переменных, которые будут видеться во всех методах класса.
Вопрос зачем?
Для сайта в котором реализуются api
Например есть страница у неё два класса
1 - user - в данном классе можно хранить id пользователя, lang, ip, и много других вещей которые защищены от изменения
если же это реализоввывать через Object()
var user = {id: 1};то очевидно что данное значение можно изменить через другой скрипт
2 - page - в данном классе можно хранить ссылки на элементы ajax loader, ajax update, так если на сайте несколько тем то очевидно что их имена div'ов id могут и не совподать.
И в таком случае если у вас есть универсальный скрипт то ему легче будет обращаться к этим элементам через два глобальных класса
Можно еще вот так:
function Class(obj){var c=obj._constr_;obj._constr_=undefined;c.prototype=obj;return c}пример класса(такой же как и на странице)
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 } })Немного улучшил:
function Class(obj){var c=obj._constr_;c.prototype=obj;return c}