我在Javascript中有一个名为Booking的自定义类:
function Booking(technicianID, startTime, start, street, zipcode, jobtypeID) {
this.technicianID = technicianID;
this.startTime = startTime;
this.start = start;
this.street = street;
this.zipcode = zipcode;
this.jobtypeID = jobtypeID;
}
我想在函数中使用此类的对象作为输入。
function bookTime(inputBooking) {
var tmpBooking = inputBooking;
alert("You chose: " + tmpBooking.start + ". Tech: " + tmpBooking.technicianID);
}
但由于某些原因,我从警报中得到的所有变量都是“未定义的”。我想这是因为它没有看到inputBooking作为Booking对象,这意味着它没有变量start和technicianID ......
我读到你可以使用一个Object.create函数,但是我无法让它工作。
tmpBooking = Object.create(Booking, inputBooking);
关于如何解决这个问题的任何想法?
修改
如果我直接从javascript发送inputBooking对象,它会按预期工作。
var tmpBooking = new Booking(tmpTechID, tmpStartTime, tmpStart, tmpStreet, tmpZipcode, tmpJobtypeID);
bookTime(tmpBooking);
//Works
但问题是我想将一个临时对象发送到HTML并生成一个调用bookTime函数的按钮:
var tmpBooking = new Booking(tmpTechID, tmpStartTime, tmpStart, tmpStreet, tmpZipcode, tmpJobtypeID);
resultsHTML += "<a href=\"#\" onclick=\"bookTime('" + tmpBooking + "')\">Book!</a>";
//Doesn't work
当我使用调试器运行它时,它表示inputBooking的类型为[object Object],并且“Children无法计算”。结果是start和technicianID变量未定义。
答案 0 :(得分:2)
您显示的代码没有任何问题。如果使用实际的Booking
对象调用该函数,它将按预期工作:
bookTime(new Booking('Tech1', 'Now', 'Now', 'Here', 'Zip', 'Job'));
演示:http://jsfiddle.net/Guffa/fRmA2/
因此,您的问题很可能是它不是您发送到函数中的Booking
对象。
您正在创建包含对象的字符串表示形式的HTML代码,但该对象的字符串表示形式不能用于重新创建看起来相同的对象。
使用代码中的变量:
resultsHTML += "<a href=\"#\" onclick=\"bookTime(tmpBooking)\">Book!</a>";
或创建将创建对象的代码:
resultsHTML += "<a href=\"#\" onclick=\"bookTime(new Booking(tmpTechID, tmpStartTime, tmpStart, tmpStreet, tmpZipcode, tmpJobtypeID))\">Book!</a>";
但是,根据您从何处获取数据,或者您是否在循环中使用它,这些都不起作用。如果您使用的变量在全局不可用,则需要使用每个变量的值来创建创建对象的代码。类似的东西:
resultsHTML += "<a href=\"#\" onclick=\"bookTime(new Booking('"+tmpTechID.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+", '"+tmpStartTime.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+", '"+tmpStart.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+", '"+tmpStreet.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+", '"+tmpZipcode.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+", '"+tmpJobtypeID.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+"))\">Book!</a>";
答案 1 :(得分:0)
您很可能忘记使用new
关键字:
var inputBooking = new Booking(...