Fixing the extend method to work on IE.

In IE, events don't have a `hasOwnProperty` method.  Instead of trusting that the source objects have this method, we call the same on the Object prototype.  If we want to be safer about the `hasOwnProperty` calling done in e3cc96dbfb, we could create an `OpenLayers.Object.has` method that also used the Object prototype.
This commit is contained in:
tschaub
2012-03-02 16:52:11 -07:00
parent 9b2e46d9c5
commit 71276b5323
2 changed files with 26 additions and 2 deletions

View File

@@ -91,7 +91,7 @@ OpenLayers.Util.extend = function(destination, source) {
destination = destination || {};
if (source) {
for (var property in source) {
if (source.hasOwnProperty(property)) {
if (Object.prototype.hasOwnProperty.call(source, property)) {
var value = source[property];
if (value !== undefined) {
destination[property] = value;

View File

@@ -1120,10 +1120,34 @@
t.eq(OpenLayers.Util.getFormattedLonLat(-181, "lon"), "179°00'00\"E", "crossing dateline from the west results in correct east coordinate");
t.eq(OpenLayers.Util.getFormattedLonLat(181, "lon"), "179°00'00\"W", "crossing dateline from the east results in correct west coordinate");
}
</script>
</head>
<body>
<div id="map" style="width: 1024px; height: 512px;"/>
<script>
/**
* To test that we can safely call OpenLayers.Util.extend with an Event
* instance, we need to capture a real event.
*/
var loadEvent;
window.onload = function(evt) {
loadEvent = evt || window.event;
}
function test_extend_event(t) {
t.plan(2);
t.ok(loadEvent, "loadEvent recorded");
var extended, err;
try {
extended = OpenLayers.Util.extend({foo: "bar"}, loadEvent);
} catch (e) {
err = e;
}
if (err) {
t.fail("Failed to extend event");
} else {
t.eq(extended && extended.foo, "bar", "extended with event");
}
}
</script>
</body>
</html>