diff --git a/src/ol/object.js b/src/ol/object.js index 0e2f7ab88d..a1723f8401 100644 --- a/src/ol/object.js +++ b/src/ol/object.js @@ -131,7 +131,7 @@ ol.ObjectAccessor.prototype.transform = function(from, to) { * property is observable as well as the object as a whole. * * Classes that inherit from this have pre-defined properties, to which you can - * add your own. The pre-defined properties are listed in this documentation as + * add your owns. The pre-defined properties are listed in this documentation as * 'Observable Properties', and have their own accessors; for example, * {@link ol.Map} has a `target` property, accessed with `getTarget()` and * changed with `setTarget()`. Not all properties are however settable. There @@ -163,6 +163,9 @@ ol.ObjectAccessor.prototype.transform = function(from, to) { * details, and see {@link ol.dom.Input} for the specific case of binding an * object with an HTML element. * + * Properties can be deleted by using the unset method. E.g. + * object.unset('foo'). + * * @constructor * @extends {ol.Observable} * @param {Object.=} opt_values An object with key-value pairs. @@ -489,3 +492,17 @@ ol.Object.prototype.unbindAll = function() { this.unbind(key); } }; + + +/** + * Unsets a property. + * @param {string} key Key name. + * @api + */ +ol.Object.prototype.unset = function(key) { + if (key in this.values_) { + var oldValue = this.values_[key]; + delete this.values_[key]; + this.notify(key, oldValue); + } +}; diff --git a/test/spec/ol/object.test.js b/test/spec/ol/object.test.js index e8890aace3..249df41a90 100644 --- a/test/spec/ol/object.test.js +++ b/test/spec/ol/object.test.js @@ -7,7 +7,7 @@ describe('ol.Object', function() { o = new ol.Object(); }); - describe('get and set', function() { + describe('get, set and unset', function() { describe('get an unset property', function() { var v; @@ -18,7 +18,6 @@ describe('ol.Object', function() { it('returns undefined', function() { expect(v).to.be(undefined); }); - }); describe('get a set property', function() { @@ -32,6 +31,17 @@ describe('ol.Object', function() { expect(v).to.eql(1); }); }); + + describe('unset a set property', function() { + beforeEach(function() { + o.set('k', 1); + }); + + it('returns undefined', function() { + var v = o.unset('k'); + expect(v).to.be(undefined); + }); + }); }); describe('#get()', function() {