function User(firstName,EmailId){
this.name = firstName;
this.email = EmailId;
this.quizScores = [];
this.currentScore = 0;
}
User.prototype = {
constructor : User,
saveScore:function (scoreToAdd) {
this.quizScores.push(scoreToAdd)
},
showNameAndScores:function () {
var scores = this.quizScores.length > 0 ? this.quizScores.join(",") : "No Scores Yet";
return this.name + " Scores: " + scores;
},
changeEmail:function (newEmail) {
this.email = newEmail;
return "New Email Saved: " + this.email;
}
}
secondUser = new User("Peter", "Peter@examnple.com");
console.log('secondUser',secondUser);
secondUser.changeEmail("Richard@examnple.com");
secondUser.saveScore(18);
secondUser.showNameAndScores();
在我的控制台上,我看到输出为
currentScore:0
email:"Richard@examnple.com"
name:"Peter"
quizScores:[18]
现在在上面的代码中,我创建了对象,然后立即在控制台上打印,然后我调用了原型方法,它仍然打印了原型方法更新的值。为什么会发生呢?
答案 0 :(得分:1)
为什么会这样?
console.log
,当传递一个对象时,打印一个" live" object,对它的引用(至少在chrome和firefox中)。如果您稍后更新该对象并且只有然后在控制台中展开对象,您将看到更新的值。要获取对象的当前状态,可以单独打印属性,例如:
console.log(secondUser.email)
另一种可能性是打印对象的深层副本,而不是对象本身。