Вызов метода объекта переданного параметром в функцию и класс. - Веб студия IZIART

Разработка сайтов
индивидуальный дизайн

Главная » JS » Вызов метода объекта переданного параметром в функцию и класс.

Вызов метода объекта переданного параметром в функцию и класс.

js

Вызов через функцию

Пробуем вывести разными способами имя заданное в передаваемом объекте alina.

let alina= {
	name: 'Alina',
	anyFunc1() {
		console.log(this.name);
	},
	anyFunc2(namer) {
		console.log(namer);
	}
};

У нас есть объект alina, со свойством name и двумя методами anyFunc. Мы попытаемся выполнить эти методы в функции, параметром в которую передаем объект содержащий эти методы и посмотрим на результат.

const tempFunc = (obj) => {
	let {name, anyFunc1, anyFunc2} = obj;

	/*this не относится к obj*/
	anyFunc1();	// Null

	/*this относится к obj*/
	obj.anyFunc1(); // Alina

	anyFunc2(name) // Alina
};
tempFunc(alina);

Принимаем в функцию tempFunc параметром объект alina и вызовем его методы разными способами.
anyFunc1() — в этом случае, результат будет null, так как this ссылается на функцию.
obj.anyFunc1() — здесь, результат будет Alina, так как this ссылается на объект который мы передали.
anyFunc2(name) — а здесь мы добавили параметр самому методу и в него передаем свойство name объекта obj. Результат — Alina.

Вызов через класс

Теперь попробуем вывести имя используя класс Person.
Для начала создадим этот класс, затем создадим экземпляр этого класса и передадим аналогичный объект, как передавали в функцию.

let alina = {
	name: 'Alina',
	anyFunc1() {
		console.log(this.name);
	},
}
class Person {
	constructor({name, anyFunc1}) {
		this.name = name;
		this.anyFunc1 = anyFunc1;
	}

	anyFunc2() { 
		console.log(this.name);
	}
};

Создаем экземпляр класса и выводим имя

const UserAlina = new Person(alina);

UserAlina.anyFunc1(); // Alina
UserAlina.anyFunc2(); // Alina

UserAlina.anyFunc1() — здесь мы вызываем метод из переданного объекта.

UserAlina.anyFunc2() — а тут функцию которую создали в классе Person

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *