Чем отличаются прототипы от классов
Я не особо разбираюсь в классах хотя и прочитал что это такое вдоль и поперек. Я читал википедию и читаю теорию ооп.
Я пришел к выводу: Прототипы - это одна из реализаций классов. Может я тупой, а может тупые те кто говорит что в js классов нет????? Или я не прав? Поправьте. Прототипы это и есть классы еманаврот! |
//это разве не класс?
function Cat(a){
this.size = a
}
//а это разве не экземпляр класса?
var cat = new Cat(4)
Нет, может я тупой? Но это же класс! Хоть убейте, но это класс кошек, который создает экземпляры! Может люди просто НЕ ЗНАЮТ? |
Утро вечера мудренее. Может не стоит пытаться понять ООП JS в 3 часа ночи ? :)
|
Цитата:
Ограничение прав доступа к полям, абстрактные поля, абстрактные классы и интерфейсы, и так далее. А в JS - функции-конструкторы объектов, работа с ними похожа на работу классическими классами o_O. Цитата:
|
Цитата:
![]() Да, пора. Туда. В 7 вставать |
Цитата:
|
Livaanderiamarum,
Э то не костыль, а так сказать подражание программированию классами, да можно сделать приватные, статические, приватные статические классы и методы.
function Class() {
Class.prototype.init.apply(this, arguments)
}
Class.prototype = new function (Class) {
// private (Вызывается в контексте инстанса)
function privateMethod () {
}
// public
this.init = function () {
privateMethod.call(this);
}
// public static
Class.staticMethod = function () {
privateStatic();
}
// независим от контекста
function privateStatic () {
}
}(Class);
А в java да, там для этого специальные конструкции
class Class() {
public void init () {}
private void privateMethod () {}
public static void staticMethod() {}
private static void privateStatic(){}
}
|
Livaanderiamarum, Синтаксические конструкции в разных языках называются по разному. Внимательно прочтите определение класса, нигде не говорится об обязательном присутствии ключевого слова class.
|
monolithed,
Цитата:
Цитата:
тред не читай @ сразу отвечай |
Цитата:
var a = 10;
function F() {
var a = 20; // зачем здесь var?
}
|
Ясно.
// private (Вызывается в контексте инстанса) я вот это не понял, он вызовится каждый раз при создании сущности относительно неё. А потом доступен не будет. Но зачем это нужно? Что я смогу с этим делать? Можно пример |
Livaanderiamarum,
Это в моем примере он вызывается только при создании сущности, но потом то он тоже будет доступен, но только внутри того scope естественно, в котором он определен. Если вы будете расширять класс public методами "снаружи", то конечно, он доступен не будет. Цитата:
var AwesomeParser = function () {
AwesomeParser.prototype.init.apply(this, arguments);
}
AwesomeParser.prototype = new function (AwesomeParser) {
/**
* @public @Array parsed
* @description Распарсенная строка
*/
this.parsed = [];
/**
* @public @Fucntion init( @String string ) : @void
* @description Инициализирует инстанс со строкой
*/
this.init = function (string) {
if (typeof string === "string") {
this.parsed = parseString(string);
}
}
this.valueOf = function () {
return prettifyParsed.call(this);
}
/**
* @private @static @RegExp R_DIGIT
*/
var R_DIGIT = /\d+/g;
/**
* @private @static @Function parseString( @String string ) : @Array
* @description Возвращает массив вхождений цифр
*/
var parseString = function (string) {
return string.match(R_DIGIT);
}
/**
* @private @Function prettifyParsed() : @Array
* @descriptoin Преобразует массив строк в массив чисел
*/
var prettifyParsed = function () {
return this.parsed.map(function (strd) {
return +strd;
});
}
}(AwesomeParser);
var parser = new AwesomeParser();
parser.init("1000 и 1 ночь");
alert(parser.valueOf());
Лично мне нравится так программировать (это очень грубый пример, тут можно просто 1 метод написать и все), кому как, зато такой класс легко расширяется, модифицируется и так далее и читать удобно |
Можно вкратце нубу мне, какие там методы бывают, приватные статические и.т.п. просто перечисли, а я загуглю)
|
public protected private, если вы об уровнях доступа или как там это называется, также бывают static поля/методы, но это не о разграничении доступа, abstract поля/методы/классы - отдельная глава, интерфейсы, еще глава. Лучше книгу почитайте про java или c++ если и правда интересно, а не трололо, потому что, вроде как именно в этих ЯП то самое (я сам эти языки не знаю), классическое ООП, кроме разделения прав доступа к свойствам еще очень много всего другого супер интересного, вложенные классы например, перегрузка методов, строгая типизация и про все это немало информации, это не в туалете с айпэдом посидеть
|
Я все еще не понимаю зачем нужны классы, если я делаю игру и делаю там пули, я опишу класс пули. Они смогут у меня летать, иметь вектор скорость, пораждать взрывы при столкновении, взрывы тоже опишу. У пулей есть приватный метод лететь() , снаружи к нему доступа нет. Снаружи доступны только .стартовать() .остановить()
Как тут можно использовать приватные переменные и методы? Я просто не понимаю ЗАЧЕМ это может понадобится? Можешь привести пример? Я ведь хочу иметь возможность снаружи манипулировать пулями, а не только чтобы они сами манипулировали собой. Есть какие-то причины по которым я могу НЕ ЗАХОТЕТЬ иметь возможность манипулировать ими еще и снаружи? то есть зачем мне может понадобится СКРЫВАТЬ метод лететь() и делать его приватным ?? Потому чт я могу нечайно его вызвать, хотя пуля должна вызвать его сама внутри себя как устройство, и тогда я случайно могу нарушить её работу потому? или могу случайно перезаписать? типа того? То есть по сути есть обьект JSON он имеет 2 метода stringfilty и parse они публичные, но внутри у него есть туева хуча методов приватных, и мне намеренно не дали возможность их трогать потому что ему самому виднее как ими пользоваться, так? Так же и тут, пулям виднее как им лететь, и во время полета я не должен изменять принцип летения, а то пуля будет лететь "неправильно". Я могу сказать ей только, либо лети, либо остановить. а как это делать она уже будет решать сама. Это то есть типа еще для красоты))? |
Будь у меня один обьект пули, я бы сделал так
var bullet = (function(){
function start(){ fly() ; fly(); fly()}
function fly(){}
return {start : start}
})()
а раз я буду создавать туеву хучу пуль, и у них должны быть общие методы (все пули летят одинакого и нет смысла забивать память записывая метод летения в каждую) и.т.п. и для этого существуют классы, так? |
Типа того, есть еще protected access, эти поля доступны только внутри наследников. Попросите чтобы вам посоветовали отличную книгу по java, отличные книги точно есть я не знаю, найдете ответы на все ваши вопросы, прям по оглавлению
|
poorking, ясно, ну так почему говорят что а js классов нет? Ты же только что показал мне? Имеется ввиду нативной поддержки классов нет, а то что мы делаем там это извраты.. типа..?
п.с. это кстати общепринятый js паттерн класса как я понял)? |
/**
* @public @Fucntion init( @String string ) : @void * @description Инициализирует инстанс со строкой */ что означают эти теги) расскажи вкратце, погуглил но все на инглише |
Livaanderiamarum,
Цитата:
Цитата:
Цитата:
|
fuuu
Цитата:
классы Животное Кролик Кот Кролик и Кот наследуют от Животное в чем суть? Представители класса Кролик и Кот будут иметь не только методы Кролика и Кота, но еще и методы Животного? Это вся суть))? |
Троллите меня чтоли, господин хороший? Я ж не справочник, а вопросы у вас типичные. Обратитесь к литературе пожалуйста
|
я не буду читать литературу чтобы получить ответ на этот вопрос, подожду пока кто нибудь ответит.
![]() |
Цитата:
|
Livaanderiamarum,
Есть такая замечательная книга ActionScript 3.0 для Flash. Подробное руководство в ней все детально описано Maxmaxmaximus, не надоело клонироваться? |
ООП не применяют ради ООП. Будет нужно сам изучит.
|
Цитата:
|
Цитата:
|
Цитата:
или C++ |
| Часовой пояс GMT +3, время: 14:32. |