无法访问从构造函数创建的对象

时间:2018-08-22 19:44:50

标签: javascript

这是我的问题:我有两个输入字段,单击按钮时会触发一个函数,使用这两个输入值(通过对象构造函数)创建一个新对象。

该函数中包含的console.log以正确的方式显示object.input1和object.input2。但是,一旦功能完成,我尝试再次控制台记录新创建的对象OR object.input1 OR object.input1,我会得到“未定义”

如果我将新创建的对象推送到数组中,可以,我可以从数组访问对象,但是不确定在数组内部时如何访问对象元素。无论如何,我不明白在创建新对象时我做错了什么。任何帮助将不胜感激。

<html>

<input type="number" id='input1' placeholder="Enter number only">
<input type="text" id='input2' placeholder="Max length 300" maxlength='300'>
<button id='btn'>Submit</button>


<script>
    var day1, notes1, day1List;


    function DayList(day, notes) {

        this.day = day;
        this.notes = notes;
    }

    document.getElementById('btn').onclick =

        function() {

            var day1 = document.getElementById('input1').valueAsNumber;

            var notes1 = document.getElementById('input2').value;

            var day1List = new DayList(day1, notes1);

            console.log(day1List.day, day1List.notes);

        }
</script>
</html>

2 个答案:

答案 0 :(得分:3)

即使您全局声明变量:

String filePath;    // File path plus name and file extension
String directory;        // File directory
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        directory = fc.getSelectedFile().getName();
    } else {
        directory = "Error in selection";
    }
filePath = directory + "\\" + folderName;

您没有设置这些,因为您是在函数范围内重新声明它们:

var day1, notes1, day1List;

只需删除var声明即可应用于全局范围:

function() {
    var day1 = document.getElementById('input1').valueAsNumber;
    var notes1 = document.getElementById('input2').value;
    var day1List = new DayList(day1, notes1);
}

但是,查看您的结构,我相信您只需要将day1List作为全局变量。其余的似乎都存储在其中。

答案 1 :(得分:0)

正如狂热爱好者所说,删除double var声明。我也重构了您的代码。通常,您应该使用addEventListener而不是onclick。这被认为是最佳做法。

let day1, notes1, day1List;

function DayList(day, notes) {

  this.day = day;
  this.notes = notes;
}

document.getElementById('btn').addEventListener('click', () => {
  day1 = document.getElementById('input1').valueAsNumber;

  notes1 = document.getElementById('input2').value;

  day1List = new DayList(day1, notes1);

  console.log(day1List.day, day1List.notes);
})
<input type="number" id='input1' placeholder="Enter number only">
<input type="text" id='input2' placeholder="Max length 300" maxlength='300'>
<button id='btn'>Submit</button>