Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.07.2019, 18:01
Новичок на форуме
Отправить личное сообщение для js123 Посмотреть профиль Найти все сообщения от js123
 
Регистрация: 02.07.2019
Сообщений: 4

Как можно унаследовать от класса функцию?
Есть код с классами 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 ();
Ответить с цитированием
  #2 (permalink)  
Старый 03.07.2019, 08:59
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от js123
функция Ba должна переместить тоже и вывести массив: 3,2,4,1.
у вас после первого перемещения не выполняется условие arr[0]>arr[1], поэтому никакого дальнейшего перемещения не будет.
да и побочки в конструкторе такое себе.. не привыкайте.
Ответить с цитированием
  #3 (permalink)  
Старый 03.07.2019, 18:09
Новичок на форуме
Отправить личное сообщение для js123 Посмотреть профиль Найти все сообщения от js123
 
Регистрация: 02.07.2019
Сообщений: 4

Ошибка понятна. Спасибо за подсказку. Что значит ' побочки в конструкторе '. Как это исправить ?
Ответить с цитированием
  #4 (permalink)  
Старый 04.07.2019, 04:14
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от js123
Что значит ' побочки в конструкторе '. Как это исправить ?
Я думаю, что вам намекают, что такие побочные эффекты в конструкторе являются плохой практикой!

Например, в констркуторе вы используете вызовы функции, которые меняют что-то вне конструктора. (А именно в этом примере массив 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);
}
Ответить с цитированием
  #5 (permalink)  
Старый 04.07.2019, 04:34
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Malleys
Я думаю, что вам намекают, что такие побочные эффекты в конструкторе являются плохой практикой!
Верно!
Сообщение от Malleys
вам такие классы не нужны
для таких целей я бы обычную функцию/метод использовал.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Константный массив, как приватное поле класса AndreyMG Общие вопросы Javascript 1 13.05.2016 19:54
Классы, как внутри класса вызвать одну функцию из другой. dimy44 Общие вопросы Javascript 4 12.01.2015 18:35
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как можно отловить событие смены класса? Emil jQuery 1 26.01.2012 20:55
как реализовать передачу функции в функцию?? czp Общие вопросы Javascript 10 29.11.2011 19:21