我正在用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',则不带()调用它,否则我不带()调用它。
我错了还是想念什么?
答案 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。