Sencha在函数调用上失去了范围

时间:2016-06-09 15:37:48

标签: function extjs scope bind

我正在尝试调用泛型函数,但是当执行该函数时,我处于不同的范围(窗口)。此代码将描述案例:

Ext.application({
    name : 'Fiddle',
    context: null,

    function1 : function(){
        this.function2(this.function3);
    },

    function2 : function(func){
        func();
    },

    function3 : function(){
        if(context == this){
            Ext.Msg.alert('Fiddle', 'Same context!');
        }
        else {
            Ext.Msg.alert('Fiddle', 'Different context!');
        }
    },

    launch : function() {
        context = this;
        this.function1();
    }
});

我正在尝试使用bind,但它无法正常工作。

谢谢!

编辑:我很抱歉,我说Javascript而不是Sencha。我认为Javascript中的问题是一样的,我可以得到更多的帮助。我道歉。我创建了一个代码来复制问题。感谢所有的评论和帮助,他们非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以使用bind方法绑定您的上下文(this)。

function1 : function(arg){
    this.function2(this.function3.bind(this), arg) // using bind
},

function2 : function(func, arg){
    func(arg);    // <-- Issue
},

function3 : function(arg){
    // this = window... I lost the scope??
},