在对象上调用方法

时间:2012-11-09 09:53:41

标签: javascript

我想记录在对象上调用方法的结果。

当前脚本在属性token中记录函数的结果字面上我的意思是结果是已定义的函数。

我在这里做错了什么?非常感谢!

   $(document).ready(function () {

        // General Settings
        var 
        ApiSettings = {
            clientId: 'aaa',
            clientSecret: 'bbb',
            token: function () {
                var token;
                $.getJSON(ApiSettings.uriGetToken, processData);
                function processData(data) {
                    token = data.access_token;
                }
                return token;
            }
        }
        ApiSettings.uriGetToken = 'https://ccc.com/oauth/token?grant_type=client_credentials&client_id=' + encodeURIComponent(ApiSettings.clientId) + '&client_secret=' + encodeURIComponent(ApiSettings.clientSecret);

        console.log(ApiSettings);
        console.log(ApiSettings.uriGetToken);
        var test = ApiSettings.token;

        console.log(test);



    });

3 个答案:

答案 0 :(得分:1)

我认为你有两个问题。

1)您需要在使用之前定义processData函数

// $.getJSON(ApiSettings.uriGetToken, processData);
// function processData(data) {
//     token = data.access_token;
// }
// Becomes:
function processData(data) {
    token = data.access_token;
}
$.getJSON(ApiSettings.uriGetToken, processData);

2)您需要调用令牌方法。

// var test = ApiSettings.token;
// Becomes:
var test = ApiSettings.token(); // Note the new brackets.

答案 1 :(得分:1)

尝试替换

        token: function () {
            var token;
            $.getJSON(ApiSettings.uriGetToken, processData);
            function processData(data) {
                token = data.access_token;
            }
            return token;
        }

        token: (function () {
            var token;
            $.getJSON(ApiSettings.uriGetToken, processData);
            function processData(data) {
                token = data.access_token;
            }
            return token;
        })()

应该内联执行你的函数。

或者,您可以将URI作为参数传递给令牌函数

       token: function (tokenURI) {
            var token;
            $.getJSON(tokenURI, processData);
            function processData(data) {
                token = data.access_token;
            }
            return token;
        }

然后致电

    ApiSettings.token('https://ccc.com/oauth/token?.......');

答案 2 :(得分:0)

从准备好的部分中取出你的代码,它会起作用。 我在我的Chrome浏览器的控制台中测试了它,它的工作原理。 可能是范围问题。