2016-02-01 24 views
0

我偷看到許多插件代碼(教育目的)和它們的基本上每一個(與原型交易),有這樣一堆功能:getter函數

myMarker.prototype.getPosition = function() { 

    return this.latlng; 
}; 

//OR 

myMarker.prototype.getObject = function() { 

    return this; 
}; 

背後有什麼原因這個?

爲什麼不只是使用someObject.latlng而不是someObject.getPosition()

+2

this.latlng可能是對象的私有屬性,所以您只能更改此屬性。 –

+0

@ ManishJangirBlogaddition.com:在JavaScript中沒有像「私有財產」這樣的東西。 – Bergi

+0

你爲什麼不問那些發明它的開發者?如果他們說'latlng'是不可讀的,請拍下他們的臉。 – choz

回答

3

這樣做是爲了避免連接對象的內部數據存儲到API的一個常見原因;在這個例子中,您可以更改位置在內部的存儲方式,然後將一些處理添加到getPosition()以返回向後兼容的結果。

例如,該庫的1.1版可能是這樣的,並且調用代碼不需要改變:

myMarker.prototype.getPosition = function() { 
    return this.latitude + this.longitude; 
}; 

這是可能的ES5 getset來完成這個計算的使用性能,但前提是代碼不需要在Internet Explorer 8及更低版本上運行。

0

當你這樣說。

myMarker.prototype.getPosition = function() { 

    return this.latlng; 
}; 

您定義功能getPosition其提供給所有的實例myMarker類。

所以,這個類的所有對象都沒有複製就共享這個方法。

對於someObject.latlng,沒有什麼不對。 但是假設,這個對象可以被當前範圍內的所有對象訪問,所以任何人都可以修改/訪問它。

當你經過原型你試圖定義一些圖案,這給限制了財產訪問和修改

相關問題