【问题标题】:google drive api init method changes datagoogle drive api init 方法更改数据
【发布时间】:2017-09-18 14:30:41
【问题描述】:

发现奇怪的东西:

var settings = {
            apiKey:"[api key]",
            client_id:"XXX-59qgl58th06ft9s160cnp28j7a3uunte.apps.googleusercontent.com",
            discoveryDocs:["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"],
            folder_id:"0B3vR4cBcxn4odVNTa0VjSmNab3M",
            redirect_uris:"http://localhost:8000",
            scope:"https://www.googleapis.com/auth/drive"
        };

        console.log(settings); //checked before init

            gapi.load('client:auth2', function(){
            gapi.client.init(
                settings
            );
            console.log(settings); //after init

gapi 初始化后,它会将设置值更改为:

client_id:"XXXX-59qgl58th06ft9s160cnp28j7a3uunte.apps.googleusercontent.com"
cookie_policy:"single_host_origin"
scope:"https://www.googleapis.com/auth/drive"

不明白为什么?!它只应该获取设置并继续。 谢谢

【问题讨论】:

    标签: javascript google-api google-drive-api google-api-js-client


    【解决方案1】:

    您的设置变量是对象类型并将其传递到 gapi.client.init() 中,您将其作为引用传递,从而允许 gapi 直接访问您的设置变量。如果您希望保持设置变量不变,请将相同的副本传递给 init 函数。

     gapi.client.init(
         JSON.parse(JSON.stringify(settings));
     );
    

    通过执行 JSON.stringify 您将整个对象转换为字符串,然后再次将其解析为对象,从而创建对象的克隆,该对象不再引用您的变量。

    【讨论】:

    • 如果它访问它改变它的对象?为什么?从未听说过这种行为
    • 我看不出库直接更改 arg 的任何具体原因。但我对这种行为并不感到很惊讶,我也不希望他们将其作为一个简单的设置对象来处理。克隆对象是否阻止它改变?
    猜你喜欢
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多