带有此关键字的函数调用未定义
function call with this keyword is undefined
我通过this
指针调用本地(类)函数,但得到一个错误'Uncaught TypeError: undefined is not a function'
。在线发生问题CCD_ 3在CCD_。
我的JS(相关)是:
this.createtimetable = function () {
this.inside_timetable = [];
for (var d = new Date(in_week_start); d <= new Date(in_week_end); d.setDate(d.getDate() + 1)) {
console.log(new Date(d));
daysOfYear.push(new Date(d));
}
}
this.loadtimetable = function (in_guide_id, in_week_start, in_week_end) {
this.guide_id = in_guide_id;
this.week_start = in_week_start;
this.week_end = in_week_end;
$.post("./j.php", {
guide_id : in_guide_id,
week_start : in_week_start,
week_end : in_week_end
})
.done(function (data) {
var res_arr = jQuery.parseJSON(data);
if (res_arr.code == 0) {
this.excursions_base = res_arr.answer;
alertify.success("Data extracted");
this.createtimetable();
} else {
alertify.error("Some problem occured." + data);
}
}).fail(function () {
alertify.alert("Error. Please, refresh page, or try later. We are sorry. Write or call us with your question!");
});
}
按名称调用(即createtimetable())也会失败。谢谢你的想法!
您的代码在回调中执行,this
不再指向您的对象。您应该使用一个闭包,将this
别名为类似self
的东西,或者显式绑定这个
this.createtimetable = function () {
this.inside_timetable = [];
for (var d = new Date(in_week_start); d <= new Date(in_week_end); d.setDate(d.getDate() + 1)) {
console.log(new Date(d));
daysOfYear.push(new Date(d));
}
}
this.loadtimetable = function (in_guide_id, in_week_start, in_week_end) {
this.guide_id = in_guide_id;
this.week_start = in_week_start;
this.week_end = in_week_end;
$.post("./j.php", {
guide_id: in_guide_id,
week_start: in_week_start,
week_end: in_week_end
})
.done(function (data) {
var res_arr = jQuery.parseJSON(data);
if (res_arr.code == 0) {
this.excursions_base = res_arr.answer;
alertify.success("Data extracted");
this.createtimetable();
} else {
alertify.error("Some problem occured." + data);
}
}.bind(this)).fail(function () {
alertify.alert("Error. Please, refresh page, or try later. We are sorry. Write or call us with your question!");
}.bind(this));
}
将$(this)
的引用存储在post函数调用之外,并在done
回调函数中使用它,这里this
不引用您的对象。
this.loadtimetable = function(in_guide_id, in_week_start, in_week_end)
{
var self = this; //store reference of this
$.post( "./j.php", {})
.done(function( data ) {
self.createtimetable(); //Here instead of this use your variable
});
}
编辑
如果您愿意使用$.ajax()
而不是$.post()
。您可以使用上下文选项。
这个对象将成为所有Ajax相关回调的上下文。默认情况下,上下文是一个表示调用中使用的ajax设置的对象(
$.ajaxSettings
与传递给$.ajax
的设置合并)(…)
$.ajax({
context: this
});
相关文章:
- Javascript函数返回未定义
- 函数内部未定义的输入值
- PhoneGap无法调用未定义的方法loadurl
- 谷歌地图:函数返回未定义的值在console.log中运行良好
- 角度指令控制器:参数不是函数,未定义
- AngularJS-参数'菜单Ctrl'不是函数,未定义
- 调用javascript函数时未定义
- 致命错误:调用未定义的函数 FusionCharts()
- 致命错误:未捕获错误:调用未定义的函数loginRelocate() Javascript
- Codeigntier/AJAX - 致命错误:调用未定义的函数 form_input() in
- Google闭包在高级模式下调用未定义的函数
- 调用循环中的函数;未定义不是函数“;
- 尝试使用onclick调用函数时未定义值
- 从不同的javascript文件调用函数导致“未定义”不是一个函数
- 从函数调用返回对象的函数输出未定义
- 自调用函数返回“未定义”
- 带有此关键字的函数调用未定义
- Socket.IO命名空间,调用未定义的函数.of()
- Javascript在调用未定义的函数时不会抛出错误
- Javascript动态调用函数-返回未定义