Как можно унаследовать от класса функцию?
Есть код с классами 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, время: 23:10. |