谷歌驱动API init()方法的变化数据

问题描述:

奇怪的发现:谷歌驱动API init()方法的变化数据

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 inits后,更改设置值:

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

能不知道为什么?它只应该得到设置并继续。 谢谢

您的设置变量是类型对象,并将它传递给gapi.client.init(),您将它作为参考传递,允许gapi直接访问您的设置变量。如果你想保持你的设置变量不变,把相同的克隆传递给init函数。

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

通过执行JSON.stringify您将整个对象为字符串,并再次解析到一个对象,它创建你的对象不再拥有对变量的任何引用的克隆。

+0

如果它访问它改变它的对象呢?为什么?从来没有听说过这种行为 – aleXela

+0

我没有看到任何具体的原因,为什么图书馆直接改变arg。但是我对这种行为并不感到惊讶,我也不指望他们把它作为一个简单的设置对象来处理。克隆物体是否阻止它改变? –