Особенности работы prototype

415
21 января 2018, 05:49

Добрый день, интересует такой вопрос: возможно ли через метод прототипа получить доступ ко всем объектам которые его наследуют?

Например мы хотим получить все наследующие объекты в один массив:

var Question = function(question, answers, correct){
    this.question = question
    this.answers = answers
    this.correct = correct
}
Question.prototype.getAllQuestion = function() {
    //магия
}
var q1 = new Question('Вы славянский шкаф продаете?', ['Таки да', 'А Вы таки кто такой будете?','Канэшна радной прадаем','Тебе надо ты и купи слона'], 3)
var q2 = new Question('Купи слона?',['А слона нет','Нет, брат, с таким настроем ты слона не продашь', 'А я возьму и куплю'], 2)
var q3 = new Question('Почему булочки для хот-догов продают по 8 штук, а сосиски по 10 штук в упаковке?',['ом-ом-ом','Ой всё'], 0)
var all = q1.getAllQuestion() // ['q1','q2','q3']
Answer 1

В конструкторе можно запоминать все созданные объекты в статический массив и по запросу возвращать их. Подход рабочий, но из существенных минусов нужно отметить неспособность сборщика мусора автоматически удалить такие объекты, поскольку на них всегда будет ссылка в нашем массиве.

var Question = function(question, answers, correct){ 
    Question._objects.push(this) // запоминаем только что созданный объект 
    this.question = question 
    this.answers = answers 
    this.correct = correct 
} 
 
Question.prototype.getAllQuestion = function() { 
    return Question._objects 
} 
 
Question._objects = [] // создаём приватное статическое поле 
 
var q1 = new Question('Вы славянский шкаф продаете?', ['Таки да', 'А Вы таки кто такой будете?','Канэшна радной прадаем','Тебе надо ты и купи слона'], 3) 
var q2 = new Question('Купи слона?',['А слона нет','Нет, брат, с таким настроем ты слона не продашь', 'А я возьму и куплю'], 2) 
var q3 = new Question('Почему булочки для хот-догов продают по 8 штук, а сосиски по 10 штук в упаковке?',['ом-ом-ом','Ой всё'], 0) 
 
var all = q1.getAllQuestion() // ['q1','q2','q3'] 
console.log(all)

READ ALSO
Как добавить элементу новый тег?

Как добавить элементу новый тег?

Начинаю учить JSМожно ли как-то <li> добавить тег <div>? Например: li

350
Как вставить в строку переменную JS?

Как вставить в строку переменную JS?

У меня есть вот такая вещь:

332
POST запрос HTML, данные из формы и извне

POST запрос HTML, данные из формы и извне

На html странице есть таблица, хранящая заказ клиентаКроме того, клиент вводит в форму свои данные

283