Google Maps проблема с JavaScript - PullRequest
0 голосов
/ 20 августа 2011

Я вижу что-то, чего не понимаю при использовании API карт Google. У меня есть следующий код, чтобы вытащить окно просмотра ...

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

Оказывается, что viewport.top возвращает ...

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

Может кто-нибудь объяснить мне, что это? Я не совсем понимаю js-прототипы, но, исходя из моего ограниченного понимания, js-прототип - это функция, прикрепленная к экземпляру объекта. Поскольку число является объектом, Google разместил функцию-прототип под названием «toJSON» на всех возвращаемых объектах?

Как мне избавиться от этого, чтобы я в итоге просто набрал номер 57.220445088498764?

Я пытаюсь использовать JSON2.js JSON.stringify, и он не возвращает правильный JSON из-за этой странной функции.

1 Ответ

1 голос
/ 21 августа 2011

В Javascript все является объектом ** - даже числа. Это означает, что мы можем добавлять методы ко всему - даже к числам. Попробуйте это в Firebug или в Chrome inspector:

Number.prototype.hello = function () {alert ("Привет, мир!"); }

var x = 2;
x.hello();

Несмотря на то, что x - это число, у него все же могут быть методы. Добавляя метод к прототипу для Number, мы гарантируем, что все числа имеют этот метод. Конечно, нормальное количество вещей тоже будет работать:

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

Похоже, это используется API Карт для добавления метода toJSON к числам для удобства. На мой взгляд, это не очень хорошая стратегия дизайна, но она также безвредна. Ваш номер будет продолжать действовать так же, как и номер, поэтому вы можете спокойно игнорировать метод toJSON.

** За исключением вещей, которых нет, таких как числовые или строковые литералы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...