0

私はJSでOOPを学び始めていますが、 falseを返したalert()ときにトリガーされないというこの問題に遭遇しました。validateString試してみpersonOne.setFirstName('');ましたが、alert()トリガーされません。

//define Name class 
function Name () {
    this.firstName = '';
    this.lastName = '';
    this.middleName = '';
    this.details = {
        eyeColor: '',
        hairColor: ''
    }
};

var validateString = function(p) {
    return typeof p != "undefined" && $.trim(p).length;
};

//begin Name methods
Name.prototype.getFullName = function() {
    return this.firstName + ' ' + this.middleName + ' ' + this.lastName;
};
Name.prototype.setFirstName = function(p) {
    if (validateString) {
        this.firstName = p;
    } else {
        alert('Please enter a valid first name.');
    }
};
Name.prototype.setLastName = function(p) {
    if (validateString) {
        this.lastName = p;
    } else {
        alert('Please enter a valid last name.');
    }
};
Name.prototype.setMiddleName = function(p) {
    if (validateString) {
        this.middleName = p;
    } else {
        alert('Please enter a valid middle name.');
    }
};
Name.prototype.setHairColor = function(p) {
    this.details.hairColor = p;
};
Name.prototype.setEyeColor = function(p) {
    this.details.eyeColor = p;
};

//end Name methods

var personOne = new Name();
personOne.setFirstName('John');
personOne.setLastName('Doe');
personOne.setMiddleName('Barry');
personOne.setEyeColor('Brown');
personOne.setHairColor('Black');
document.write(personOne.getFullName());
document.write(personOne.details.eyeColor);
document.write(personOne.details.hairColor);
4

2 に答える 2

2

に引数を渡す必要がありますvalidateString

if (validateString(p)) {
  //etc
}

編集: ... また、@potench が述べたように、ifステートメントがそのまま評価された理由は次のとおりtrueです。

if (myFunc) {
  //blah
}

myFunc「定義済み変数として存在する場合」を意味します。if (3)この場合、 orと同じif (true)です。

于 2012-06-29T05:36:27.730 に答える
0

この場合は必要ありませんvalidateString。検討

Name.prototype.setFirstName = function(p) {
  this.firstName = p || alert('please enter a first name');
}

これは、短絡ブール値と呼ばれます。パラメーターが指定されていない場合、またはパラメーターが空の文字列の場合、アラートがトリガーされ、this.firstName will be undefined. If you need to check te length ofp` を使用します。

Name.prototype.setFirstName = function(p) {
  this.firstName = (p && p.trim().length) || alert('please enter a first name');
}
于 2012-06-29T05:52:42.867 に答える