我正在 CodeCademy 上做一個專案,我需要為一些學生創建一個 setter 方法。它應該檢查該值是否為數字,如果是,則回傳該值,否則記錄錯誤。我最初想出了這段代碼
set numberOFStudents(val) {
if(typeof val === 'number') {
this._numberOfStudents = val;
} else {
console.log('Invalid input: numberOfStudents must be set to a Number.')
}
}
但它不起作用,因為該值沒有效果。它將回傳字串和數字作為值。但是,當我在常規函式中使用此方法時,它可以完美運行https://jsfiddle.net/Montinyek/v8zsL5et/12/ 演練中使用的方法是這樣的:
set numberOfStudents(val) {
if(val.isNaN()) {
console.log('Invalid input: numberOfStudents must be set to a Number.')
} else {
this._numberOfStudents = val;
}
}
這在常規函式中不起作用,因為它回傳錯誤https://jsfiddle.net/Montinyek/e6k7qdcs/ 但是這讓我更加困惑,演練中使用的方法似乎也沒有效果。我仍然可以將學生人數設定為一個字串,它會記錄它,而不是記錄錯誤。這是整個代碼的jsfiddle https://jsfiddle.net/Montinyek/1j7wL5gm/
uj5u.com熱心網友回復:
這是因為您沒有在建構式中使用設定器。因此,當您傳入字串時,它會分配它。
你需要改變
constructor(name, level, numberOfStudents) {
this._name = name;
this._level = level;
this._numberOfStudents = numberOfStudents;
}
到
constructor(name, level, numberOfStudents) {
this._name = name;
this._level = level;
this.numberOfStudents = numberOfStudents;
}
所以它使用setter而不是成員變數。第一種方式直接將其分配給您的成員,而不是使用 setter。
這是根據您的示例進行更改的完整代碼;
class School {
constructor(name, level, numberOfStudents) {
this._name = name;
this._level = level;
this.numberOfStudents = numberOfStudents;
}
get name() {
return this._name;
}
get level() {
return this._level;
}
get numberOfStudents() {
return this._numberOfStudents;
}
set numberOfStudents(val) {
if(typeof val !== 'number') {
console.log('Invalid input: numberOfStudents must be set to a Number.')
} else {
this._numberOfStudents = val;
}
}
quickFacts() {
console.log(`${this.name} educates ${this.numberOfStudents} students at the ${this.level} school level.`)
}
static pickSubstituteTeacher(substituteTeachers) {
const randInd = Math.floor(Math.random() * substituteTeachers.length)
return substituteTeachers[randInd];
}
}
class PrimarySchool extends School {
constructor(name, numberOfStudents, pickupPolicy) {
super(name, 'primary', numberOfStudents)
this._pickupPolicy = pickupPolicy;
}
get pickupPolicy() {
return this._pickupPolicy;
}
}
class HighSchool extends School {
constructor(name, numberOfStudents, sportsTeams) {
super(name, 'high', numberOfStudents)
this._sportsTeams = sportsTeams;
}
get sportsTeams() {
return this._sportsTeams;
}
}
const lorraineHansburry = new PrimarySchool('Lorraine Hansbury', 'g', 'Students must be picked up by a parent, guardian, or a family member over the age of 13.');
lorraineHansburry.quickFacts();
const alSmith = new HighSchool('Al E. Smith', 415, ['Baseball', 'Basketball', 'Volleyball', 'Track and Field'])
alSmith.quickFacts();
這是保存的 jsfiddle 顯示其作業
https://jsfiddle.net/6qoadu27/6/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449331.html
