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()
то очевидно что данное значение можно изменить через другой скрипт
2 - page - в данном классе можно хранить ссылки на элементы ajax loader, ajax update, так если на сайте несколько тем то очевидно что их имена div'ов id могут и не совподать.
И в таком случае если у вас есть универсальный скрипт то ему легче будет обращаться к этим элементам через два глобальных класса
Можно еще вот так:
пример класса(такой же как и на странице)
Немного улучшил: