为什么控制台显示对象内容时,对象显示为未定义

Why is object appearing as not defined, when console shows object contents?

本文关键字:对象 显示 未定义 控制台 为什么      更新时间:2023-09-26

我想,我想要完成的事情很简单。我希望能够在文本框中输入我的名字,点击提交,并将信息打印到对象内的控制台。当我打开控制台时,它似乎可以工作。我可以输入不同的名字,它会被打印到控制台上。但是,如果我试图查找Person对象,就会得到一个错误,说它未定义。发生什么事情了?

https://jsfiddle.net/w0zwrqoa/

HTML

  <p>First Name</p>
  <input type="text" id="fname">
  <p>Last Name</p>
  <input type="text" id="lname">
  <button id="button">Submit</button>

JS

var Person = function (firstname, lastname) {
    this.firstname = firstname; 
    this.lastname = lastname; 
}; 
document.getElementById('button').onclick = function() {
var fn = document.getElementById('fname').value; 
var ln = document.getElementById('lname').value;
function addPerson (person){
    console.log(person); 
}; 
var user = new Person (fn, ln); 
addPerson(user); 
}; 

变量user的作用域是onclick函数,它不存在于外部。您可以在此之前定义user,如下面的代码所示:

var Person = function (firstname, lastname) {
    this.firstname = firstname;
    this.lastname = lastname;
};
var user;
document.getElementById('button').onclick = function () {
    var fn = document.getElementById('fname').value;
    var ln = document.getElementById('lname').value;
    function addPerson(person) {
        console.log(person);
    };
    user = new Person(fn, ln);
    addPerson(user);
};

正如在注释中所说,在控制台中输入"Person"并不一定反映刚刚创建的"Person"。添加数组

People = [];
var Person = function... 

,然后在add person函数中向数组中添加新的人,

People.push(person);
console.log(person);

现在允许你在控制台中输入"People",并看到你正在寻找的东西。