Javascript 在同一个';返回值对象';

Javascript 在同一个';返回值对象';,javascript,Javascript,如何访问同一“返回值对象”中的javascript函数,且父函数未命名 这是一个代码示例 function ($http, $rootScope, $timeout, $location, config, $q, sessionService) { return { _get_user_approval_mode: function (data) { var defer = $q.defer(); this.prepare

如何访问同一“返回值对象”中的javascript函数,且父函数未命名

这是一个代码示例

function ($http, $rootScope, $timeout, $location, config, $q, sessionService) {

    return {
        _get_user_approval_mode: function (data) {
            var defer = $q.defer();
            this.prepareHttpCall($http, true);
            $http.post(config.CLIENT_API_ROOT + 'user-approval-mode', {
                    params: data
                })
                .then(function (response) {
                    defer.resolve(response);
                }).catch(function (error) {
                    if (error_handler(error) === "") { //Getting on this line since error_handler() is undefined
                        defer.reject(error);
                    }
                });
            return defer.promise;
        },
        error_handler(error) {
            console.log('error received in handler');
            console.log(error);
            if (error.status == "400") {
                $('#somethingWrong').modal('show');
                $rootScope.errorHandleMessage = error.data.reason;
            } else if (error.status == "401" && error.data.message == "Unauthorized" || error.status == "401" && error.data.message == "The incoming token has expired") {
                // $('body').removeClass('modal-open');
                // $('.modal-backdrop').remove();
                $location.path('/login');
            } else if (error.status + "".match('5\d{2}')) {
                $('#somethingWrong').modal('show');
                $rootScope.errorHandleMessage = "Sorry! something went wrong, please try after sometime.";
            } else {
                return "";
            }
            return "error handled";
        }
    }

}

我在尝试调用“error\u handler”函数时,在函数“\u get\u user\u approval\u mode”中遇到了未定义的错误,如上面代码中所述。

在不知道如何调用
\u get\u user\u approval\u mode
的情况下(即不知道它的
这个
值将是什么),是“最安全的”解决方案是将对象分配给变量并访问该变量:

function ($http, $rootScope, $timeout, $location, config, $q, sessionService) {

    var obj = {
        _get_user_approval_mode: function (data) {
            var defer = $q.defer();
            this.prepareHttpCall($http, true);
            $http.post(config.CLIENT_API_ROOT + 'user-approval-mode', {
                    params: data
                })
                .then(function (response) {
                    defer.resolve(response);
                }).catch(function (error) {
                    if (obj.error_handler(error) === "") {
                        defer.reject(error);
                    }
                });
            return defer.promise;
        },
        error_handler(error) {
            // ...
        }
    };

    return obj;

}

但是,如果
error\u handler
实际上不必是对象上的方法,因为它不是从其他代码调用的,那么将其定义为单独的函数将更有意义。

该代码示例甚至不是有效的JavaScript,
error\u handler(error){
在这一点上没有意义,应该是
error\u handler:function(error){
也是。但这当然不能解决您的问题-这些函数唯一有名称的地方是在您返回的对象的上下文中。@misorude:ES2015引入了对象文字的方法语法。@FelixKling啊,不知道这一点。(但我至少希望人们能决定一种或另一种语法,但不能同时使用这两种语法。)@misorude:我必须同意这一点:DThanks Felix-这很有效,而且你的评论也是正确的-我应该这么想。真的很感谢你的帮助-谢谢