读取同一对象中的属性时出现JavaScript错误?

时间:2015-05-27 01:47:17

标签: javascript

以下是我项目中较大的JavaScript对象的一部分。我删除了几千行代码来揭示有问题的部分...

下面的

第6行是有问题的代码行。

JavaScript的简单示例

projectTaskModal = {

    // Cache Properties
    cache: {
        $taskDueDateSpan: $('#task-modal-due-date-span'),
        $taskDueDateVal: projectTaskModal.cache.$taskDueDateSpan.dataAttr('due-date'),
    }

}

首先,我试过这个:
$taskDueDateVal: projectTaskModal.cache.$taskDueDateSpan.dataAttr('due-date'),

但是这导致了此控制台错误:Uncaught TypeError: Cannot read property 'cache' of undefined

接下来我也尝试了这个:
$taskDueDateVal: this.$taskDueDateSpan.dataAttr('due-date'),

但这也导致了此控制台错误:Uncaught TypeError: Cannot read property '$taskDueDateSpan' of undefined

正如您在第6行所见,我试图访问第5行的值 projectTaskModal.cache.$taskDueDateSpan

2 个答案:

答案 0 :(得分:3)

您不能从对象文字本身内部引用“正在构建”对象。我们唯一要做的就是在最初构建对象后更新对象。

projectTaskModal = {

    // Cache Properties
    cache: {
        $taskDueDateSpan: $('#task-modal-due-date-span')
    }

};

projectTaskModal.cache.$taskDueDateVal = projectTaskModal.cache.$taskDueDateSpan.dataAttr('due-date');

或者,使用该jQuery表达式初始化另一个变量,并将其用于两个属性:

var $dueDateSpan = $('#task-modal-due-date-span');

projectTaskModal = {

    // Cache Properties
    cache: {
        $taskDueDateSpan: $dueDateSpan,
        $taskDueDateVal: $dueDateSpan.dataAttr('due-date')
    }

}

答案 1 :(得分:1)

JS是一种严格而不是懒惰评估的语言。

这意味着语句中的表达式将在内部进行评估。

projectTaskModal = {

    // Cache Properties
    cache: {
        $taskDueDateSpan: $('#task-modal-due-date-span'),
        $taskDueDateVal: projectTaskModal.cache.$taskDueDateSpan.dataAttr('due-date'),
    }

}

因此,在此语句中,首先评估正确的部分(对象文字),然后将对它的引用赋给变量projectTaskModal

这意味着在评估过程中projectTaskModal的值为undefined