我们何时需要在JavaScript OOP中使用“获取”关键字

时间:2019-06-25 11:05:19

标签: javascript class oop ecmascript-6 get

我正在用JavaScript中的OOP刷新内存,我有些困惑。我只是选择一个项目,然后尝试将其转换为OOP。 “获取”关键字真的很重要吗?让我们看下面的代码:

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

在设计程序时,我想知道是否可以使用'get'。所以O做了尝试,正如您在get nbrCols()上看到的那样。如果我放入get nbrRows()并将其命名为cipher.nbrRows(),则除非得到将其命名为cipher.nbrRows的更改方式,否则都会收到错误消息。 因此,我的结论是:这取决于您。如果使用'get',则不带()调用它,否则我不带()调用它。 我错了还是想念什么?

2 个答案:

答案 0 :(得分:1)

通过使用get语法,您正在向对象添加一个getter,这是ES5(2009)中引入的。

请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

您当然可以添加一个显式的getProperty函数,而不使用getter。

访问吸气剂时不使用括号

您所使用的技术取决于您自己,每种技术都有自己的优势,

例如:

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);

   

答案 1 :(得分:1)

  

由您决定。如果您使用get而不用()调用它,或者如果您不使用get则用()调用它。

是的。如果希望像访问数据属性一样访问值,并且仅在计算不会使您的实例发生变化的情况下,才应使用getter。