puddlejumper26 / blogs

Personal Tech Blogs
4 stars 1 forks source link

Setter Getter in TypeScript #5

Open puddlejumper26 opened 4 years ago

puddlejumper26 commented 4 years ago

Accessor properties. They are essentially functions that work on getting and setting a value, but look like regular properties to an external code.

1.0 getter

{get prop() { ... } }
{get [expression]() { ... } }
const obj = {
  log: ['example','test'],
  get latest() {            <==== a <pseudo-property> latest for object obj
    if (this.log.length === 0) return undefined;
    return this.log[this.log.length - 1];
  }
}

obj.latest = '123';      <==== attempting to assign a value to latest will not change it.
console.log(obj.latest); // "test"

1.1 deleting


delete obj.latest;                         <==== deleting
console.log(obj.latest); // undefined

1.2 Defining a getter on existing objects using defineProperty


const o = {a: 0};

Object.defineProperty(o, 'b', { get: function() { return this.a + 1; } });

console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)

1.3 Smart / self-overwriting / lazy getters

image

private get getData(){ }

// here when it is called,

..... this.getData,             <=======

// and if without get

private getData() { }

// here when it is called

.... this.getData( );         <=======

2.0 setter

{set prop(val) { . . . }}
{set [expression](val) { . . . }}
const language = {
  set current(name) {
    this.log.push(name);
  },
  log: []
}

language.current = 'EN';
console.log(language.log); // ['EN']

language.current = 'FA';
console.log(language.log); // ['EN', 'FA']
private set setData(param: boolean) { }

// here is when it is called

..... this.setData = true;            <=======

// and if without set

private setData(param: boolean) { }

// here is  when it is called

.... this.setData ( true ) ;          <=======

Reference

[1] https://www.jackfranklin.co.uk/blog/es5-getters-setters/ [2] https://javascript.info/property-accessors