Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Свойство prototype


Автор: Aliance 26.4.2005, 17:24
Читал много литераторы. Смотрел сорцы кодов (Sardar часто использует это свойство).
Ничего не помогает, решил обратиться к опытным в этом деле: помогите разобраться и научится использовать св-во prototype. Для меня это дремучий лес smile

Из изученного мною знаю, что:
  • у тегов этотго свойства нет =/
  • его св-ва наследуют все объекты; все св-ва объекта-прототипа становятся св-вами любых объектов, для которых он явл. прототипом.
  • все объекты и функции имеют свой протитип

Но мне не хватает практического применения этой фичи, кто поможет? :-D

Автор: diam 26.4.2005, 18:42
А в чём проблема?

Цитата(Aliance @ 26.4.2005, 17:24)
его св-ва наследуют все объекты; все св-ва объекта-прототипа становятся св-вами любых объектов, для которых он явл. прототипом.


Ты, по сути, сам почти ответил на свой вопрос.
Код

// Конструктор объектов Browser
function Browser () {
        this.name = "Мой браузер";
}
//
var myBrowser = new Browser();

// Сейчас мы промолчим)
if ( myBrowser.version ) alert('Ап');

Browser.prototype.version = "Версия";
//А вот сейчас запоём алертом "Версия";
if ( myBrowser.version ) alert ( myBrowser.version );


Вооот smile

Автор: Aliance 26.4.2005, 18:53
То, что я знаю ответ - не значит что я его понимаю smile Вот можете наиболее подробно закомментировать вот эту часть....

Цитата(diam @ 26.4.2005, 19:42)
if ( myBrowser.version ) alert('Ап');

Browser.prototype.version = "Версия";
//А вот сейчас запоём алертом "Версия";
if ( myBrowser.version ) alert ( myBrowser.version );

Автор: Aliance 26.4.2005, 19:12
Если убрать задание прототипа - алерта нет и браузер грузиться.
Если наоборот - все окей.
Если оба - то ок и грузится.

Хм... в принципе уже становится яснее. Но ведь version нигде не звучало - как мы можем его проалертить, логично smile
Но встает вопрос - когда нам это пригодится?
И, что важнее, как прототип работает с функциями, а не объектами?

Автор: Gregof 27.4.2005, 06:34
Цитата(Aliance @ 26.4.2005, 19:12)
И, что важнее, как прототип работает с функциями, а не объектами?
Функции это тоже объекты.
Хорошая статья про прототипы здесь: http://dklab.ru/chicken/nablas/39.html
Цитата(Aliance @ 26.4.2005, 19:12)
Но встает вопрос - когда нам это пригодится?
Посмотри эту сататью : http://www.webmascon.com/topics/technologies/12a.asp. Я конечно на так оптимистично оцениваю будущее web-приложений. Но как раз этим сейчас и занимаюсь smile
Возможности объектного-ориентированного программирования в сочетании с XMLHttpRequest позволяют создавать весьма сложные и удобные программы ( язык не поворачивается называть их страницами smile).

Автор: Aliance 27.4.2005, 14:15
Т.е. использовать его нужно только для непрямого создания методов? Хм...не приходилось мне еще встречать такого...

Цитата(Gregof @ 27.4.2005, 07:34)
Посмотри эту сататью

посмотрел, только как это относится к теме? =)

Автор: Aliance 27.4.2005, 15:03
Я хорошо вроде бы понял работу прототипа для создания методов, например:
Код

var x = 2;
Number.prototype.sqr = function() { return this*this }
alert(x.sqr());

var y = "ляляля";
String.prototype.sqr2 = function() { return this }
alert(y.sqr2());


Там так же написано, что лучше все методы генерить кодом, хотя не понятно почему. И почему данный сценарий неьзя заменить на более простой:
Код

var xx = 10;
alert(xx*xx);

Автор: Gregof 27.4.2005, 17:21
Это просто пример.
Вот другой:
Код

var x = 2;
Number.prototype.pow = function(p) { var res=this; for(var i=1;i<p;i++) res*=this;  return res }
alert(x.pow(5));

Или код
Код

var xx = 2;
alert(xx*xx*xx*xx*xx);

удобней?

Автор: Aliance 27.4.2005, 18:26
Да не в коде дело... Это все можно сделать и иначе, без прототипа. Единственное, что, возиожно, прототип удобен для получения ссылки this? Т.е. иначе ж не получить ее. Это так?
Тогда понятнее. А теперь хочу словами примеры использования прототипа. Например: чтобы сделать калькулятор, используй прототип, там тогда ты легко получишь корень x. (это был пример, с рандомными словами smile )

Автор: Gregof 28.4.2005, 07:31
Цитата(Aliance @ 27.4.2005, 18:26)
Да не в коде дело... Это все можно сделать и иначе, без прототипа.
Открой книгу по ООП и посмотри для чего нужны объекты и их наследование. Всё что можно сделать с использованием прототипов, можно сделать и без них, но с ними красивей и удобней. Вот и всё smile
Что касается примеров, то их можно найти в тех же книгах по ООП smile
Иначе говоря я не ответил на твой вопрос, а сослался на то что это всё к JavaScript отношения не имеет, это проблема применения или не применения принципов ООП smile. А это вопрос для "религиозных войн" smile

Автор: Иль 29.4.2005, 14:51
Я не стал вчитываться в топик. Напишу почеловечески. Ведь про ООП обычно много лишней воды льют, брошурку не найти smile , тем более в JS работает не как в Java, PHP и тд.

Вот создал ты конструктор obj, насоздавал с него одинаковых объектов ggg= new obj, много-много, а потом бах, и захотел у всех разом создать новое свойство/метод. А как? А вот как Sardar через прототип и делал.
Код

odj.prototype.getKeys=function() {
... ля-ля-ля ... 
}

вот getKeys сразу у всех и появится, прототип-то у всех один smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)