Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.06.2019, 21:43
Аспирант
Отправить личное сообщение для nathan111777 Посмотреть профиль Найти все сообщения от nathan111777
 
Регистрация: 12.05.2019
Сообщений: 44

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


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

Animal.prototype.draw =function () {
}



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

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

Последний раз редактировалось nathan111777, 19.06.2019 в 22:42.
Ответить с цитированием
  #2 (permalink)  
Старый 20.06.2019, 02:07
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

В играх это сплошь и рядом.
Ответить с цитированием
  #3 (permalink)  
Старый 20.06.2019, 10:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

nathan111777,
если draw в конструкторе => 100 ёжиков, 100 раз создана функция draw.
если draw в прототипе => 100 ёжиков ,0 раз создана функция draw, используется одна, та, что в прототипе для всех ёжиков.
Ответить с цитированием
  #4 (permalink)  
Старый 20.06.2019, 11:22
Аспирант
Отправить личное сообщение для nathan111777 Посмотреть профиль Найти все сообщения от nathan111777
 
Регистрация: 12.05.2019
Сообщений: 44

Тоесть конструктор нужен для создания многих однотипных объектов, но для каждого объекта надо каждый раз прописывать метод Draw. А прототип присваивает всем объектам метод Draw за один раз его написания? Правильно?
Ответить с цитированием
  #5 (permalink)  
Старый 20.06.2019, 11:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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


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


оптимальный,прототипный вариант, у вас в первом сообщении.
Ответить с цитированием
  #6 (permalink)  
Старый 20.06.2019, 16:21
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от 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);
Хотя такой объект не прошёл соответствующей инициализации через конструктор, он является массивом (ломанным массивом, поскольку не реагирует на изменения в индексах, но вы можете работать с ним через методы)

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

Последний раз редактировалось Malleys, 20.06.2019 в 16:23.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск