Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конструктор объекта (https://javascript.ru/forum/misc/73503-konstruktor-obekta.html)

VyacheslavBozere 20.04.2018 18:56

Конструктор объекта
 
Всем привет! Изучаю JavaScript и столкнулся с недопониманием темы.
Нужно что бы метод plus объекта Vektor вернул сумму двух объектов новым объектом Vektor. Почему через функцию set ошибка не выводится. А если просто объявить конструктор, то выводится. Подскажите пожалуйста.

(function() {
class Vektor {
	constructor(x, y){
		this.x = x;
		this.y = y;
	}
	set(value1, value2) {
	return new Vektor(value1, value2);// Ошибки нет
}

	plus(Vektor){
		/*let newVektor = new Vektor(Vektor.x, Vektor.y); //Ошибка Vektor не конструктор.*/
		let a = this.x + Vektor.x; 
		let b = this.y + Vektor.y;
		Vektor = Vektor.set(a, b);//При использовании сеттера
		return Vektor;
	}
}

console.log(new Vektor(1, 2).plus(new Vecktor(2, 3)));

VyacheslavBozere 20.04.2018 22:39

Цитата:

Сообщение от Rise (Сообщение 483730)
Что за полукод? Где собственно вызов класса?

(function() {
class Vektor {
	constructor(x, y){
		this.x = x;
		this.y = y;
	}
	set(value1, value2) {
	return new Vektor(value1, value2);// Ошибки нет
}

	plus(Vektor){
		/*let newVektor = new Vektor(Vektor.x, Vektor.y); //Ошибка Vektor не конструктор.*/
		let a = this.x + Vektor.x; 
		let b = this.y + Vektor.y;
		Vektor = Vektor.set(a, b);//При использовании сеттера
		return Vektor;
	}
}

console.log(new Vektor(1, 2).plus(new Vektor(2, 3)));

VyacheslavBozere 21.04.2018 03:46

Ваше решение лучше. Но вопрос был в другом, почему же в одном случае, когда использую сеттер консоль не ругается, а во втором случае, когда записываю конструктор в методе плюс, он у меня закоментированный, консоль ругается , что это не конструктор. Как бы мне это понять ?

(function() {
class Vektor {
	constructor(x, y){
		this.x = x;
		this.y = y;
	}
	[COLOR="Yellow"]set(value1, value2) {
	return new Vektor(value1, value2);// Ошибки нет[/COLOR]
}

	plus(Vektor){
		[COLOR="Yellow"]/*let newVektor = new Vektor(Vektor.x, Vektor.y); //Ошибка Vektor не конструктор.*/[/COLOR]
		let a = this.x + Vektor.x; 
		let b = this.y + Vektor.y;
		Vektor = Vektor.set(a, b);//При использовании сеттера
		return Vektor;
	}
}

console.log(new Vektor(1, 2).plus(new Vektor(2, 3)));

VyacheslavBozere 21.04.2018 14:55

Цитата:

Сообщение от Rise (Сообщение 483739)
Потому что название конструктора и параметра метода совпадают.

Но если я передам в него числа 1, 2 или другие переменные, то тоже вылазит ошибка, что конструктор не обьявлен.

VyacheslavBozere 21.04.2018 16:01

Огромнейшее спасибо!


Часовой пояс GMT +3, время: 13:39.