Javascript 序列化GoogleMapsLatLng并存储在cookie中

Javascript 序列化GoogleMapsLatLng并存储在cookie中,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我试图将谷歌地图的中心点存储到cookie中,并在下次加载页面时将地图恢复到最后一个位置 当然,我可以将纬度和经度作为字符串或序列化数组之类的东西保存到cookie中,但我很好奇是否可以将Google Maps LatLng对象JSON序列化到cookie中,然后稍后再恢复它 我正在使用JQuery和这个库: 我用地图上的一个格子来设置cookie: $.cookies.set( 'map_center', map.getCenter()); 然后我尝试读取它,期望序列化/反序列化将恢复我的对

我试图将谷歌地图的中心点存储到cookie中,并在下次加载页面时将地图恢复到最后一个位置

当然,我可以将纬度和经度作为字符串或序列化数组之类的东西保存到cookie中,但我很好奇是否可以将Google Maps LatLng对象JSON序列化到cookie中,然后稍后再恢复它

我正在使用JQuery和这个库:

我用地图上的一个格子来设置cookie:

$.cookies.set( 'map_center', map.getCenter());
然后我尝试读取它,期望序列化/反序列化将恢复我的对象

var centerpointFromCookie = $.cookies.get('map_center);
map.setCenter(centerpointFromCookie);
但对象类型似乎没有保留。在脚本控制台中,这是LatLng对象序列化并存储在cookie中之前的样子:

map.getCenter()
O
$a: 151.21950000000004
Za: -33.8688
__proto__: O
constructor: function O(a, b, c) {a-=0;b-=0;c||(a=Bd(a,-90,90),b=Cd(b,-180,180));this.Za=a;this.$a=b;}
equals: function (a) {return!a?k:Dd(this.lat(),a.lat())&&Dd(this.lng(),a.lng());}
lat: function () {return this[a];}
lng: function () {return this[a];}
toString: function () {return"("+this.lat()+", "+this.lng()+")";}
toUrlValue: function (a) {a=Hd(a)?a:6;return ae(this.lat(),a)+","+ae(this.lng(),a);}
__proto__: Object
这就是后来的情况:

centerpointFromCookie
Object
$a: 151.21950000000004
Za: -33.8688
__proto__: Object
__defineGetter__: function __defineGetter__() {
__defineSetter__: function __defineSetter__() {
__lookupGetter__: function __lookupGetter__() {
__lookupSetter__: function __lookupSetter__() {
constructor: function Object() {
hasOwnProperty: function hasOwnProperty() {
isPrototypeOf: function isPrototypeOf() {
propertyIsEnumerable: function propertyIsEnumerable() {
toLocaleString: function toLocaleString() {
toString: function toString() {
valueOf: function valueOf() {

反序列化时是否需要将对象强制转换为GoogleMapsLatLng类型?我知道我可以只存储这些值,但我想了解如何正确地将这样的小对象序列化为cookie。

只需序列化lat/lng即可

序列化对象的原型或函数属性效果不佳,因为它们必须为此进行字符串化,并且当您尝试将字符串转换回函数时,将丢失对原始范围中可见但现在不可见的变量的所有引用。而且你也不容易猜到以后如何手动恢复正确的原型,因为原型随时都可能发生变化。你将把你的对象绑定到LatLng原型的特定版本上,当API更新时,这将是不有趣的


更不用说序列化那么多数据会比普通的lat/lng在cookie中占用更多的空间。

只需序列化lat/lng即可

序列化对象的原型或函数属性效果不佳,因为它们必须为此进行字符串化,并且当您尝试将字符串转换回函数时,将丢失对原始范围中可见但现在不可见的变量的所有引用。而且你也不容易猜到以后如何手动恢复正确的原型,因为原型随时都可能发生变化。你将把你的对象绑定到LatLng原型的特定版本上,当API更新时,这将是不有趣的

更不用说序列化那么多数据会比普通的lat/lng在cookie中占用更多的空间。

getCenter()
已经给出了值。因此,您可以将其转换为JSON字符串,并在需要再次使用时对其进行解析

var center = JSON.stringify(map.getCenter());
$.cookies.set( 'map_center', center);
当你想从cookie中读取数据时

var centerpointFromCookie = $.cookies.get('map_center);
map.setCenter(JSON.parse(centerpointFromCookie));
getCenter()
已经只提供了值。因此,您可以将其转换为JSON字符串,并在需要再次使用时对其进行解析

var center = JSON.stringify(map.getCenter());
$.cookies.set( 'map_center', center);
当你想从cookie中读取数据时

var centerpointFromCookie = $.cookies.get('map_center);
map.setCenter(JSON.parse(centerpointFromCookie));

即使这是可能的,您也将依赖于实现细节。你不应该。这可能意味着您的应用程序将来可能会中断。我会(事实上过去也有过同样的事情)坚持在cookie中存储纬度和经度。当然,如果你的问题仅仅是出于好奇,那么没有什么可以反对的。即使这是可能的,你也将依赖于实现细节。你不应该。这可能意味着您的应用程序将来可能会中断。我会(事实上过去也有过同样的事情)坚持在cookie中存储纬度和经度。当然如果你的问题仅仅是出于好奇,那么没有什么反对的。我只是想用LatLng类来字符串化,而不考虑序列化,但这在其他情况下作为一种方法是有意义的。我只是想用LatLng类来字符串化,而不考虑序列化,但这在其他情况下作为一种方法是有意义的情况。