Когда нам нужно использовать ключевое слово «get» в ООП JavaScript - PullRequest
0 голосов
/ 25 июня 2019

Я обновляю свою память с помощью ООП в JavaScript, и я немного запутался.Я просто выбираю один из своих проектов и пытаюсь преобразовать его в ООП.Действительно ли ключевое слово «получить» действительно важно?Давайте посмотрим код ниже:

class Cipher {
    constructor (str) {
        this.str = str;
    }

    normalizedPlainText() {
        return this.str.replace(/\W/g,'').toLowerCase();
    }

    size() {
        return this.normalizedPlainText(this.str).length;
    }

    isValid() {
        if ( this.size(this.str) >= 50 ) return true;
    }

    squareRoot() {
        return parseInt(Math.sqrt(this.size((this.str))));
    }

    nbrRows() {
        return this.squareRoot(this.str);
    }

    get nbrCols() {
        if ( Math.pow(this.squareRoot(this.str), 2) === this.size(this.str)) return this.squareRoot(this.str);
        else return this.squareRoot(this.str) + 1;
    }
}



    const cipher = new Cipher('Your description gives people the information they need to help you answer your question##8.');
    console.log('sqrt '+cipher.squareRoot())
    console.log('Nbr rows ' + cipher.nbrRows()) //good output
    console.log('Nbr cols ' + cipher.nbrCols) // good output too

При разработке моей программы я задавался вопросом, могу ли я использовать «получить» или нет.Так что O попытался, как вы можете видеть на get nbrCols ().Если я поставлю get nbrRows () и назову его cipher.nbrRows(), я получу ошибку, если я не изменю способ, которым я называю это, как cipher.nbrRows.Итак, у меня есть следующий вывод: решать вам.Если вы используете 'get', вызывайте его без () или I, который вы не используете, вызывайте его с ().Я ошибаюсь или мне что-то не хватает?

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Это зависит от вас.Если вы используете get, звоните без () или если вы не используете get, звоните с ().

Да, именно так.Вы должны использовать getter, если хотите, чтобы к значению обращались так, как если бы оно было свойством данных, и только тогда, когда вычисления не изменяют ваш экземпляр.

1 голос
/ 25 июня 2019

Используя синтаксис get, вы добавляете геттер к объекту, они были представлены в ES5 (2009).

См .: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

Конечно, вы можете добавить явную функцию getProperty вместо использования метода получения.

Вы не используете скобки при доступе к получателю,

Какая бы техника вы ни использовали, у вас есть свои преимущества:

Например:

let person = { 
   _age: 42,
   get age() { 
       console.log("getter called!");
       return this._age;
   },
   set age(age) {
       console.log("setter called!");
       this._age = age; 
   },
   getAge() {
       return this._age; 
   }
}

console.log("Age: ", person.age);
console.log("Age (using getAge()): ", person.getAge());

// Assign age using setter 
person.age = 21;
console.log("Age (after set): ", person.age);

   
...