我似乎无法从函数返回一个对象,函数内的console.log打印出属性值很好但是一旦在函数外面我得到“Uncaught ReferenceError:firstOn is not defined”
任何帮助将不胜感激,谢谢!
myElement = document.getElementById("testButton");
function Server(name,tables,startTime) {
this.name = name;
this.tables = tables;
this.startTime = startTime;
}
document.forms.server1.button.onclick = function() {
var name = document.forms.server1.servername.value;
var tables = document.forms.server1.servertables.value;
var startTime = document.forms.server1.servertime.value;
var firstOn = new Server(name,tables,startTime);
document.forms.server1.button.innerHTML = "Saved!";
console.log(firstOn.name);
console.log(firstOn.tables);
console.log(firstOn.startTime);
return firstOn;
};
myElement.onclick = function() {
console.log(firstOn.name);
console.log(firstOn.tables);
console.log(firstOn.startTime);
};
答案 0 :(得分:3)
firstOn对象是在本地函数范围内创建的。它在第二个函数中不可用于全局。
答案 1 :(得分:0)
我认为这是解决我问题的合适方法。
myElement = document.getElementById("testButton");
function Server(name,tables,startTime) {
this.name = name;
this.tables = tables;
this.startTime = startTime;
}
var firstOn = new Server();
document.forms.server1.button.onclick = function() {
firstOn.name = document.forms.server1.servername.value;
firstOn.tables = document.forms.server1.servertables.value;
firstOn.startTime = document.forms.server1.servertime.value;
document.forms.server1.button.innerHTML = "Saved!";
console.log(firstOn.name);
console.log(firstOn.tables);
console.log(firstOn.startTime);
return firstOn;
};
myElement.onclick = function() {
console.log(firstOn.name);
console.log(firstOn.tables);
console.log(firstOn.startTime);
};
答案 2 :(得分:0)
firstOn
是从document.forms.server1.button.onclick
事件处理程序创建并返回的对象。该事件处理程序的返回值进入系统(事件处理程序返回的位置)并且从未存储在任何地方,因此系统使用垃圾回收对其进行了清理。
与此同时,您的myElement.onclick
事件处理程序无法访问firstOn
对象,因为它未保存在myElement.onclick
可以到达的任何位置。
如果希望firstOn
在document.forms.server1.button.onclick
事件处理程序之后可用,则必须将其保存在第二个单击处理程序可以使用的位置。这可以是全局变量,也可以是全局可访问的其他对象的属性。正如您的代码现在编写的那样,firstOn
对象已创建,但从未存储在任何地方,因此垃圾收集器很快就会清理它,而其他代码无法访问它。
答案 3 :(得分:0)
var firstOn = new winMain.Server(name,tables,startTime);