Прототип (отдельно) и конструктор (отдельно) на реальных примерах из сайтов?
читал о конструкторах в функциях:
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, время: 20:21. |