Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Прототип (отдельно) и конструктор (отдельно) на реальных примерах из сайтов? (https://javascript.ru/forum/misc/77778-prototip-otdelno-i-konstruktor-otdelno-na-realnykh-primerakh-iz-sajjtov.html)

nathan111777 19.06.2019 21:43

Прототип (отдельно) и конструктор (отдельно) на реальных примерах из сайтов?
 
читал о конструкторах в функциях:
function Animal(name) {
  this.name = name;
  this.canWalk = true;
}
var animal = new Animal("ёжик");


а также о прототипах:

Animal.prototype.draw =function () {
}



Но до конца не понял как именно они уменьшают код и впринципе улучшают жизнь програмистам))Почему? Потому что лучше понимается на реальних примерах из сайтов а не на примерах animal или "ёжиках" всяких.Пример из моего личного опыта: хорошо засвоил циклы когда нужно было для 30 изображений прописать функцию но я вместо 30 функций передал одну функцию в цикл и уменьшил таким образом код, так я и понял всю суть цикла, а не просто заучил его анатомию. Вот бы и на учебных ресурсах делали примеры из реальных проектов новички не задавали бы по 100 однотипных вопросов.

Поэтому у меня такие вопросы:
1)Можете ли вы написать здесь как выглядел бы код сначала без прототипа и затем с прототипом на каком-то маленьком примере из сайта? Или пример который мог бы быть реализован на каком сайте
2)Можете ли вы написать здесь как выглядел бы код сначала без конструктора и затем с прототипом на каком-то маленьком примере из сайта? Или пример который мог бы быть реализован на каком сайте

MC-XOBAHCK 20.06.2019 02:07

В играх это сплошь и рядом.

рони 20.06.2019 10:35

nathan111777,
если draw в конструкторе => 100 ёжиков, 100 раз создана функция draw.
если draw в прототипе => 100 ёжиков ,0 раз создана функция draw, используется одна, та, что в прототипе для всех ёжиков.

nathan111777 20.06.2019 11:22

Тоесть конструктор нужен для создания многих однотипных объектов, но для каждого объекта надо каждый раз прописывать метод Draw. А прототип присваивает всем объектам метод Draw за один раз его написания? Правильно?

рони 20.06.2019 11:53

nathan111777,
это затратный способ использования draw
function Animal(name) {
  this.name = name;
  this.canWalk = true;
  this.draw = 
function () { 


} 
 
}
var animal = new Animal("ёжик");


оптимальный,прототипный вариант, у вас в первом сообщении.

Malleys 20.06.2019 16:21

Цитата:

Сообщение от nathan111777
бы код сначала без прототипа и затем с прототипом на каком-то маленьком примере

Т. е. пример с наследованием и без наследования...

Все объекты обычно создаются при помощи какого-то конструктора (явно (например, const list = new Array(55, 44);) или неявно (например, const list = [55, 44];)) и наследуют от Object.

Без конструктора тоже возможно! Например,

var myObject = { __proto__: null, length: 2, "0": 55, "1": 44 };
console.log(myObject);
У него нет цепочки прототипов, т. е. это такой объект, который содержит только собственные свойства. Хотя он похож на массив (имеется свойство length и установлены правильные индексы), но он не является массивом, поскольку не был сконструирован при помощи класса Array и не имеет соответствующих методов из-за этого!

Цитата:

Сообщение от nathan111777
бы код сначала без конструктора и затем с прототипом

Можно самим вручную указать, чтобы без конструктора и с прототипом...
var myObject = { __proto__: Array.prototype, length: 2, "0": 55, "1": 44 };
console.log(myObject);
Хотя такой объект не прошёл соответствующей инициализации через конструктор, он является массивом (ломанным массивом, поскольку не реагирует на изменения в индексах, но вы можете работать с ним через методы)

Возможно вам будет интересно прочитать некоторые другие сообщения на эту тему...
Может стоит посмотреть некоторые видео об ООП!


Часовой пояс GMT +3, время: 00:23.