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');
Я специально минимально менял Ваш код, по-хорошему надо очень многое переписать по-другому.