JS Scoping问题,其中2个变量似乎表现不一样

时间:2016-03-21 15:29:43

标签: javascript scope

下面的代码令我不安:

define('TodoItem', function()
{
    var Component = require('Component')
    var app = require('application').app
    var merge = $.extend

    var TodoItem = Component.extend(
    {
        template : 'todo-item-template',

        events :
        {
            'button.completed click'    : 'markAsCompleted',
            'button.delete click'       : 'remove'
        },

        getInitialState : function()
        {
            var initial =
            {
                uuid        : undefined,
                text        : '',
                completed   : false
            }

            return initial
        },

        markAsCompleted : function(evt)
        {
            if (this.root)
            {
                var test = merge({}, this.getInitialState(), { whatever : 'whatever' })
                app.completeTodo(this.model.uuid)
            }
        }
    }
}

markAsCompleted()被执行时,merge被调用而没有意外,但不知何故,对app.completeTodo()的调用会引发Uncaught TypeError: Cannot read property 'completeTodo' of undefined(并且app确实是{{1} }})。

undefined是对象的引用,其值改变的唯一方法是在此期间引用的对象发生更改。然而app仍然评估它应该对象。

这似乎是一个简单的JS问题,我误解了,但我无法理解。

提前感谢您的帮助!

0 个答案:

没有答案