2011-08-19 4 views
0

Je vois quelque chose que je ne comprends pas lorsque j'utilise l'API Google Maps. J'ai le code suivant pour tirer la fenêtre ...Google maps javascript issue

var bounds = map.getBounds(); 
var viewport = { 
    top: bounds.getNorthEast().lat(), 
    right: bounds.getNorthEast().lng(), 
    bottom: bounds.getSouthWest().lat(), 
    left: bounds.getSouthWest().lng() 
}; 

Transforme que les rendements viewport.top ...

57.220445088498764 { 
    toJSON : function(key) { return this.valueOf(); } } 

Quelqu'un peut-il me expliquer ce que cela est? Je ne comprends pas complètement les prototypes js, mais basé sur ma compréhension limitée, un prototype js est une fonction attachée à une instance d'un objet. Puisqu'un nombre est un objet, Google a-t-il placé une fonction prototype appelée 'toJSON' sur tous les objets qu'il retourne?

Comment puis-je me débarrasser de cela pour que je finisse avec simplement le numéro 57.220445088498764?

J'essaye d'utiliser le json2.js JSON.stringify, et il ne rend pas JSON correct en raison de cette fonction bizarre.

+0

'delete Number.prototype.toJSON' –

+0

Quel est le problème avec la façon dont les choses fonctionnent maintenant? Avoir une fonction supplémentaire sur le prototype de nombre ne devrait pas faire de mal (ou du moins pas quelque chose que vous rencontreriez normalement). Se débarrasser de cette fonction peut être une très mauvaise idée, car d'autres parties de l'API Google peuvent s'y fier. – Pointy

Répondre

1

En Javascript tout est un objet ** - nombres pairs. Cela signifie que nous pouvons ajouter des méthodes à n'importe quoi - des nombres pairs. Essayez ceci dans Firebug ou l'inspecteur Chrome:

Number.prototype.hello = function() {alert ("Bonjour, monde!"); }

var x = 2; 
x.hello(); 

Même si x est un nombre, il peut avoir encore des méthodes. En ajoutant une méthode au prototype pour Number, nous nous assurons que tous les numéros ont cette méthode. Bien sûr, les choses numbery normales continueront à fonctionner aussi:

var y = x + 2; 
window.console.log(y); // Will output 4. 

Cela semble être utilisé par l'API Maps pour ajouter une méthode de toJSON aux numéros pour convinience. À mon avis, ce n'est pas une excellente stratégie de conception, mais c'est aussi inoffensif. Votre numéro continuera à agir comme un numéro, vous pouvez donc ignorer la méthode toJSON en toute sécurité.

** Sauf les choses qui ne le sont pas, comme les littéraux numériques ou de chaîne.