在同一个js对象下从另一个方法调用一个方法

Ela*_*nda 1 javascript

我写了一些js:

var folersTreeMgr = {

    sendDeleteFolderRequestAndUpdateFoldersTree: function () {
       ...

        } else {
            createAjaxRequest("Manager/DeleteLocation", {
                'locationId': folder_minimal_descriptor.locationId
            }).done(function (isSucceeded) {

                if (isSucceeded) {

                    folersTreeMgr.deleteFolderInFoldersTree(); // works
                    this.deleteFolderInFoldersTree(); // doesn't work
                    deleteFolderInFoldersTree(); // doesn't work
                }

                //TODO: else: error
            });
        }
    },


    deleteFolderInFoldersTree: function () {
        $("#jstree").jstree("remove", null);
    }
};
Run Code Online (Sandbox Code Playgroud)

为什么我会出现"缺失功能"错误

小智 6

因为你在this回调中使用它有不同的含义.

您可以this在变量中引用外部,然后在回调中使用它.

var folersTreeMgr = {

    sendDeleteFolderRequestAndUpdateFoldersTree: function () {

       var self = this;  // cache it

       ...

        } else {
            createAjaxRequest("Manager/DeleteLocation", {
                'locationId': folder_minimal_descriptor.locationId
            }).done(function (isSucceeded) {
                if (isSucceeded) {
                   self.deleteFolderInFoldersTree(); // works
                }
            });
        }
    },
    deleteFolderInFoldersTree: function () {
        $("#jstree").jstree("remove", null);
    }
};
Run Code Online (Sandbox Code Playgroud)

$.proxy用来保持this价值......

createAjaxRequest("Manager/DeleteLocation", {
    'locationId': folder_minimal_descriptor.locationId
}).done( $.proxy(function (isSucceeded) {
    if (isSucceeded) {
       this.deleteFolderInFoldersTree(); // works
    }
},this) );
Run Code Online (Sandbox Code Playgroud)

这将返回一个函数,该函数具有$.proxy绑定到作为第一个参数传递的函数的第二个参数.