Как можно унаследовать от класса функцию?
Есть код с классами An и Ba. Необходимо сделать , чтобы класс Ba унаследовал от An функцию :
function moveElement(arr,from,to) {arr.splice(to,0,arr.splice(from,1)[0]); return arr;}; if (arr[0]>arr[1]) document.write(moveElement(arr,0,1)); alert ('hello'); Так как функция An уже переместила элементы массива ,учитывая перемещение, функция Ba должна переместить тоже и вывести массив: 3,2,4,1. Первое перемещение происходит, но второе нет. Как унаследовать от An функцию? Вот полный код. var arr = [4, 3, 2, 1]; function An() {function moveElement(arr,from,to) {arr.splice(to,0,arr.splice(from,1)[0]); return arr;}; if (arr[0]>arr[1]) document.write(moveElement(arr,0,1)); alert ('hello');} var an = new An(); function Ba() { An.apply(this, arguments); } Ba.prototype = Object.create(An.prototype); Ba.prototype.constructor = Ba; var ba = new Ba (); |
Цитата:
да и побочки в конструкторе такое себе.. не привыкайте. |
Ошибка понятна. Спасибо за подсказку. Что значит ' побочки в конструкторе '. Как это исправить ?
|
Цитата:
Например, в констркуторе вы используете вызовы функции, которые меняют что-то вне конструктора. (А именно в этом примере массив arr) Я не представляю, что же могут означать эти классы (An и Ba), но то, как вы используете метод moveElement, показывает, что вам такие классы не нужны, чтобы они не представляли. У меня сложилось впечатление, что вы хотите добавить методы для работы с массивом! В таком случае, почему бы не наследовать от класса Array. (Ведь именно с его экземпляром вы и пытаетесь работать) { class MyArrayExtension extends Array { moveElement(from, to) { this.splice(to, 0, this.splice(from, 1)[0]); return this; } } const an = new MyArrayExtension(4, 3, 2, 1); an.moveElement(0, 1); console.log(an); } |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 12:52. |