2011-08-19 64 views
0

我在使用Google地圖API時看到了一些不明白的地方。我有以下代碼拉視...Google maps javascript問題

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。

+0

'刪除Number.prototype.toJSON' –

+0

什麼事情現在正在工作的方式的問題?在Number原型上有一個額外的功能不應該傷害任何東西(或者至少不是你通常會遇到的任何東西)。擺脫這種功能可能是一個非常糟糕的主意,因爲Google API的其他部分可能依賴它。 – Pointy

回答

1

在Javascript中,一切都是對象** - 偶數。這意味着我們可以將任何方法添加到偶數中。試試這個在Firebug或Chrome檢查器:

Number.prototype.hello = function(){alert(「Hello,world!」); }

var x = 2; 
x.hello(); 

即使x是一個數字,它仍然可以有方法。通過在Number的原型中添加方法,我們確保所有數字都具有該方法。當然,正常numbery事情仍然會工作過:

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

這似乎是由地圖API可用於一個的toJSON方法添加到號碼舒適。我認爲這不是一個很好的設計策略,但它也是無害的。你的號碼將繼續像數字一樣行動,所以你可以放心地忽略toJSON方法。

**除了都沒有,像數字或字符串文字的東西。