Javascript代码执行序列

时间:2018-03-21 10:00:59

标签: javascript

    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]

现在在上面的代码中,我创建了对象,然后立即在控制台上打印,然后我调用了原型方法,它仍然打印了原型方法更新的值。为什么会发生呢?

在展开此对象之前 enter image description here

展开此对象后 enter image description here

1 个答案:

答案 0 :(得分:1)

  

为什么会这样?

console.log,当传递一个对象时,打印一个" live" object,对它的引用(至少在chrome和firefox中)。如果您稍后更新该对象并且只有然后在控制台中展开对象,您将看到更新的值。要获取对象的当前状态,可以单独打印属性,例如:

 console.log(secondUser.email)

另一种可能性是打印对象的深层副本,而不是对象本身。