无法从其他属性(函数)访问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()
give
Firebug中对
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();