macik_spb
@macik_spb
Ф-ф-фрилансер :))

Как реализовать список, позволяющий хранить объекты с возможностью переопределить методы работы со списком при определении самого элемента?

Пишу на Javascript, но опыта и знаний маловато.

Задача сделать универсальный объект список со своими методами работы с элементами,
но иметь при этом возможность эти методы переопределять при задании произвольных типов для элемента.

Ниже условный (псевдо) код для иллюстрации задачи.

// определяем объект списка и метод добавления элемента
var list_obj = function(typeOfItem){
   var self = this;
   self.itemType = typeOfItem;
   self.list = [];

  self.add = function (item){
     self.list.push(item);
  }

  // вот тут видимо не хватает кода для связки (переопределения) метода .add из определения объекта списка
}

// определяем произвольный тип элемента списка
var item_obj = function(){
   var self = this;
 
   // ф-я добаления элемента в список
   self.add = function(item){
        self.list.push('custom_'+item);
       // вот тут проблема, т.к. self.list должен ссылаться на метод .list из того объекта,
       // для которого используется этот тип элементов
   }
}

var myList = new list_obj(item_obj);
myList.add('test');  
// по задумке должен сработать метод .add определенный в типе элемента:
// должно получиться myList = ['custom_test'];


P.S. Очень надеюсь, что объяснил доходчиво.
  • Вопрос задан
  • 2769 просмотров
Решения вопроса 1
@zvorygin
10 раз подумайте зачем Вам такое нужно, но если очень нужно - то вот:
// определяем объект списка и метод добавления элемента
var list_obj = function(typeOfItem){
   var self = this;
   self.itemType = typeOfItem;
   self.list = [];

  self.add = function (item){
    typeOfItem.add.call(self, item);
  }

  // вот тут видимо не хватает кода для связки (переопределения) метода .add из определения объекта списка
}

// определяем произвольный тип элемента списка
var item_obj = function(){
   var self = this;
 
   // ф-я добаления элемента в список
   self.add = function(item){
        this.list.push('custom_'+item);
       // вот тут проблема, т.к. self.list должен ссылаться на метод .list из того объекта,
       // для которого используется этот тип элементов
   }
}

var myList = new list_obj(new item_obj());
myList.add('test');


Я специально минимально менял Ваш код, по-хорошему надо очень многое переписать по-другому.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
aen
@aen
Keep calm and 'use strict';
Если я вас правильно понял, то вы пытаетесь изобрести сущность, которая очень блика к коллекции из backbone.js.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы