无法从其他属性(函数)访问Javascript对象属性
快速提问,为什么我在无法从其他属性(函数)访问Javascript对象属性,javascript,jquery,variables,scope,Javascript,Jquery,Variables,Scope,快速提问,为什么我在change_date()giveFirebug中对weekdays的引用未定义错误 我也试过这个。平日也一样 我如何纠正这个问题 var timesheet_common = { weekdays : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], change_date: function() { $('#text_input').val( weekdays[(new Date()).getDa
change_date()
giveFirebug中对weekdays
的引用未定义
错误
我也试过这个。平日也一样
我如何纠正这个问题
var timesheet_common = {
weekdays : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],
change_date: function() {
$('#text_input').val( weekdays[(new Date()).getDay()] );
}
};
使用this.weekdays,因为它是一个对象
编辑:我尝试了
这个
,它对我有效。在JavaScript中,函数与其模型没有关联。你可以这样做:
var timesheet_common = (function(){
var weekdays = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var change_date = function() {
$('#text_input').val( weekdays[(new Date()).getDay()] );
};
return { weekdays: weekdays, change_date: change_date }
})();
您的代码有两个问题:
change_date()
中,您应该将weekdays
称为this.weekdays
,因为它们都定义在同一个对象中change\u date()
作为单击处理程序时,必须改用$.proxy(timesheet\u common,'change\u date')
;这样做可以确保在timesheet\u common
的上下文中调用change\u date()
,而不是在单击的元素中调用可能您更改了错误的
工作日。只有函数中的工作日
应该是this。工作日
。您如何调用change\u date?如果将其附加到事件处理程序,则this关键字可能引用触发事件的对象。Alex M,您是对的。我正在使用$('#selected_date').datepicker({'onSelect':this.change_date})
我想知道为什么这个.change_date
有效,但是这个.weekdays
无效。卡萨布兰卡,是的,我做了$('#text_input').val(这个.weekdays[(new date()).getDay())代码>我得到'this.weekdays is undefined'在Firebug中运行-var timesheet_common={weekdays:[“Sun”,“Mon”,“Tue”,“Wed”,“Thu”,“Fri”,“Sat”],change_date:function(){console.log(this.weekdays);};时间表\通用。更改\日期()代码>在Firebug中运行时,上面的确切代码是未定义的
?嗯,听起来你的Firebug好像有问题:)在给定代码中分配给change\u date
属性的匿名函数的函数上下文是该属性所属的对象文本。如果您将this.weekday
替换为this
,它会说什么?@Obay不会将返回值与日志消息混淆(即在Chrome开发工具中)。哇,我不知道你可以用javascript制作这样的对象。这里发生了什么事?为什么你已经可以在时间表上调用新的?该代码的哪一部分将TimesheetCommon转换为可new
的对象?当使用new调用时,每个函数都会创建一个对象。如上所示,向prototype属性添加方法。
function TimesheetCommon(){
this.weekdays = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
}
TimesheetCommon.prototype.change_date = function(){
$('#text_input').val( this.weekdays[(new Date()).getDay()] );
}
var timesheet_common = new TimesheetCommon();