Прототип (отдельно) и конструктор (отдельно) на реальных примерах из сайтов?
читал о конструкторах в функциях:
function Animal(name) { this.name = name; this.canWalk = true; } var animal = new Animal("ёжик"); а также о прототипах: Animal.prototype.draw =function () { } Но до конца не понял как именно они уменьшают код и впринципе улучшают жизнь програмистам))Почему? Потому что лучше понимается на реальних примерах из сайтов а не на примерах animal или "ёжиках" всяких.Пример из моего личного опыта: хорошо засвоил циклы когда нужно было для 30 изображений прописать функцию но я вместо 30 функций передал одну функцию в цикл и уменьшил таким образом код, так я и понял всю суть цикла, а не просто заучил его анатомию. Вот бы и на учебных ресурсах делали примеры из реальных проектов новички не задавали бы по 100 однотипных вопросов. Поэтому у меня такие вопросы: 1)Можете ли вы написать здесь как выглядел бы код сначала без прототипа и затем с прототипом на каком-то маленьком примере из сайта? Или пример который мог бы быть реализован на каком сайте 2)Можете ли вы написать здесь как выглядел бы код сначала без конструктора и затем с прототипом на каком-то маленьком примере из сайта? Или пример который мог бы быть реализован на каком сайте |
В играх это сплошь и рядом.
|
nathan111777,
если draw в конструкторе => 100 ёжиков, 100 раз создана функция draw. если draw в прототипе => 100 ёжиков ,0 раз создана функция draw, используется одна, та, что в прототипе для всех ёжиков. |
Тоесть конструктор нужен для создания многих однотипных объектов, но для каждого объекта надо каждый раз прописывать метод Draw. А прототип присваивает всем объектам метод Draw за один раз его написания? Правильно?
|
nathan111777,
это затратный способ использования draw function Animal(name) { this.name = name; this.canWalk = true; this.draw = function () { } } var animal = new Animal("ёжик"); оптимальный,прототипный вариант, у вас в первом сообщении. |
Цитата:
Все объекты обычно создаются при помощи какого-то конструктора (явно (например, 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 и не имеет соответствующих методов из-за этого! Цитата:
var myObject = { __proto__: Array.prototype, length: 2, "0": 55, "1": 44 }; console.log(myObject);Хотя такой объект не прошёл соответствующей инициализации через конструктор, он является массивом (ломанным массивом, поскольку не реагирует на изменения в индексах, но вы можете работать с ним через методы) Возможно вам будет интересно прочитать некоторые другие сообщения на эту тему...
Может стоит посмотреть некоторые видео об ООП!
|
Часовой пояс GMT +3, время: 14:22. |