谷歌驱动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您将整个对象为字符串,并再次解析到一个对象,它创建你的对象不再拥有对变量的任何引用的克隆。
如果它访问它改变它的对象呢?为什么?从来没有听说过这种行为 – aleXela
我没有看到任何具体的原因,为什么图书馆直接改变arg。但是我对这种行为并不感到惊讶,我也不指望他们把它作为一个简单的设置对象来处理。克隆物体是否阻止它改变? –