Класс JavaScript установил сам - PullRequest
0 голосов
/ 16 мая 2018

Очевидно, что свойства класса могут иметь свои собственные функции get и set.Но как насчет this?

Как я пытался до сих пор, разрешено делать что-то вроде этого:

class Bind { 
  constructor(val) {
    this.val = val;
  }
  set this(val) { 
    alert('not sure what happens here!');
  }
  get this() { 
    return this.val;
  }
}

, поэтому эти строки:

var b = new Bind(123);
b = 456;

должнывызовите функцию установщика, но предупреждение никогда не сработает.

Есть идеи, что делает этот установщик?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018
class Person {
    constructor(name) {
        this._name = name;
    }

    get name() {
        console.log("getter")
        return this._name.toUpperCase();
    }

    set name(newName) {
        console.log("setter")
        this._name = newName;  
    }
}

let bob = new Person('Bob');
console.log(bob.name);// Outputs 'BOB'
bob.name = "new Bob"
console.log(bob.name);  // Outputs 'NEW BOB'
0 голосов
/ 16 мая 2018
  b = 456;

Потому что это никак не изменяет предыдущее значение b, оно просто меняет ранее сохраненную ссылку на значение.Небольшой пример того, что я имею в виду:

let a = {it: "wont change" };
let b = a;

console.log(a, b);

b = 456;

console.log(a, b);

Если перезапись b изменит ссылочный объект в любом случае, a тоже изменится.


Вместо этого выможет связаться с сеттером с помощью:

 b.this = 456;
...