get & set

get, set- геттер і сеттер (getter & setter) привязує властивість до функції.

get

Синтаксис get:

{ get prop(){ //код функції } } { get [expression](){ //код функції } }

set

Синтаксис set:

{ set prop(val){ //код функції } } { set [expression](val){ //код функції } }

Параметри:

prop - назва властивості до якої привязується функція.

expression - назва зміної яка містить назву властивості до якої привязується функція.

val - значення яке буде приймати функція.

Опис get:

get прив'язує функцію до властивості об'єкта і при звернені до властивості для отримання значення виконується функція.

getвикористовується якщо необхідно повернути результат приватної властивості або результату який є динамічний або потребує обчислення.

var ob={ num:[7,3,5], get last(){ if(this.num.length==0)return 0; return this.num[this.num.length-1]; } } alert( ob.last ); var exp='last'; var ob={ num:[7,3,5], get [exp](){ if(this.num.length==0)return 0; return this.num[this.num.length-1]; } } alert( ob.last );

Опис set:

set привязує функцію до властивості об'єкта і при зміненні значеня властивості виконується функція якій у якості параметра передається значення яке присвоюється.

set використовується для виконання прив'язаної функції при змінені значення властивості об'єкта.

Додати set до існуючого об'єкта можна за допомогою Object.defineProperty().

var ob={ text:[], set addText(s){ this.text.push(s); } }; ob.addText='js'; ob.addText='css'; ob.addText='html'; alert( ob.text ); var exp='addText'; var ob={ text:[], set [exp](s){ this.text.push(s); } }; ob.addText='js'; ob.addText='css'; ob.addText='html'; alert( ob.text );

Приклад:

let user={ name: "Jini", surname: "Setor", get fullName(){ return this.name+' '+this.surname; }, set fullName(value){ fullname=value.split(' '); this.name=value[0]; this.surname=value[1]; } }; alert( user.fullName ); Використання get і set у class: class Person{ #name=''; constructor(name){ this.#name=name; } get name(){ return 'User: '+this.#name; } set name(newName){ newName = newName.trim(); if(newName==='') this.#name='amonimus'; else this.#name = newName; } } var u=new Person('Jon'); alert( u.name );