如果我从“this”传递函数,则监听器不起作用

时间:2014-03-02 16:27:43

标签: javascript extjs

我遇到了非常奇怪的行为:

此代码抛出“TypeError:无法读取未定义的属性'fn':

Ext.create('Ext.window.Window', {
    listeners: {
        close: this.processClose
    },
    processClose: function() {
        alert('processed');
    }
}).show();

但这可以正常使用

Ext.create('Ext.window.Window', {
    listeners: {
        close: function() {
             this.processClose();
        }
    },
    processClose: function() {
        alert('processed');
    }
}).show();

怎么可能?在我看来,这两段代码是完全相同的。

1 个答案:

答案 0 :(得分:3)

他们不一样。差异是评估this的时间。在第一种情况下,this将指向发出声明时this指针的任何内容,因为在创建窗口对象之前需要对整个右侧进行求值。在第二种情况下,它会延迟到回调执行。对于close事件,this指针默认为窗口对象。