Сортировка и наследование с помощью javascript

84
12

В моем javascript-коде для расширения FireFox есть функция jquery, object и sort-function, которая выглядит следующим образом:

var myModel = {
list:[],
anotherList:[],
sortedList:[],//newly added propaty for newly added methods.
sortedAnotherList:[], //newly added propaty for newly added methods.

getListStings: function(){
var result = "";
var firstTags = '<div class="imglist"><p class="title">List</p><div><table>';
var lastTags = '</table></div></div>';
var listlength = this.list.length;
result += firstTags;
for(var i=0; i<listlength; i++){
result += "<tr><td>"+this.list[i] + "</td></tr>";
}
result += lastTags;
return (result);
},
getSortedList: function(){//newly and tentatively added method.
var result = "";
var firstTags = '<div class="imglist"><p class="title">Sorted List</p><div><table>';
var lastTags = '</table></div></div>';
var listlength = this.sortedList.length;
result += firstTags;
for(var i=0; i<listlength; i++){
result += "<tr><td>"+this.sortedList[i] + "</td></tr>";
}
result += lastTags;
return (result);
},
sortList: function(){//newly added method.
this.sortedList = this.list;
this.sortedList.sort();
},
...(other methods are here.)
}
var outputResult ={
...
}
$(function(){
...
// when click-handler triggered
myModel.sortList();
outputResult.output(myModel.getSortedList);
....
});

Раньше у него не было функций, сортирующих массивы, и я недавно добавил функцию. Сначала я добавил свойство sortedList [] и метод sortList() в объект myModel.

Теперь я сталкиваюсь с проблемой. Я предварительно добавил метод getSortedList(), который получает отсортированный результат, но это явно избыточно.

Если это другой язык ООП, я могу использовать наследование, но я слышал, что у Javascript этого нет, и я не знаю, как их создавать и использовать.

Какое хорошее решение для этой ситуации? Должен ли я создавать и использовать некоторые методы наследования, или мне нужно modyfy getListString обрабатывать отсортированный список?

У последнего, похоже, есть две большие проблемы, одна из проблем обслуживания. Добавление нового аргумента в.getListStings (новый аргумент) для работы с как list [], так и sortedList [] может вызвать проблему в другой части этого кода, который используется этим методом.

Другой проблемой является аргумент - это объекты в "этом" объекте, поэтому, например, для модификации строки "this.list.length" аргумент не может быть использован напрямую, вместо этого нужен новый валидный и условный оператор, но включение условных обозначений не подходит для ООП.

Любые рекомендации по этой проблеме будут оценены.

спросил(а) 2013-07-23T14:19:00+04:00 6 лет, 6 месяцев назад
1
Решение
49

Прежде всего, чтобы ваш код был чистым, вы можете повторно использовать код без наследования:

var myModel = {
list:[],
anotherList:[],
sortedList:[],//newly added propaty for newly added methods.
sortedAnotherList:[], //newly added propaty for newly added methods.

getListStings: function(){
return this.getListHTML('List', this.list);
},

getSortedList: function(){//newly and tentatively added method.
return this.getListHTML('Sorted List', this.sortedList);
},

getListHTML: function (title, list) {
var result = '<div class="imglist"><p class="title">' + title + '</p><div><table>';
var listlength = list.length;
for(var i=0; i<listlength; i++){
result += "<tr><td>" + list[i] + "</td></tr>";
}
result += '</table></div></div>';
return result;
},

sortList: function(){//newly added method.
//If you want to keep the unsorted array you'll need to create a new array
this.sortedList = this.list.slice();
this.sortedList.sort();
},
...(other methods are here.)
}

Во-вторых, наследование в JS существует, вот некоторые показания:

ответил(а) 2013-07-23T15:25:00+04:00 6 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема