Getters for member expression properties

This commit is contained in:
Tim Schaub
2013-06-11 22:56:17 -06:00
parent 2528581642
commit c05fb8c61b
2 changed files with 35 additions and 4 deletions

View File

@@ -554,17 +554,17 @@ ol.expression.Math.prototype.getRight = function() {
*
* @constructor
* @extends {ol.expression.Expression}
* @param {ol.expression.Expression} expr An expression that resolves to an
* @param {ol.expression.Expression} object An expression that resolves to an
* object.
* @param {ol.expression.Identifier} property Identifier with name of property.
*/
ol.expression.Member = function(expr, property) {
ol.expression.Member = function(object, property) {
/**
* @type {ol.expression.Expression}
* @private
*/
this.expr_ = expr;
this.object_ = object;
/**
* @type {ol.expression.Identifier}
@@ -581,7 +581,7 @@ goog.inherits(ol.expression.Member, ol.expression.Expression);
*/
ol.expression.Member.prototype.evaluate = function(opt_scope, opt_fns,
opt_this) {
var obj = this.expr_.evaluate(opt_scope, opt_fns, opt_this);
var obj = this.object_.evaluate(opt_scope, opt_fns, opt_this);
if (!goog.isObject(obj)) {
throw new Error('Expected member expression to evaluate to an object ' +
'but got ' + obj);
@@ -590,6 +590,24 @@ ol.expression.Member.prototype.evaluate = function(opt_scope, opt_fns,
};
/**
* Get the object expression.
* @return {ol.expression.Expression} The object.
*/
ol.expression.Member.prototype.getObject = function() {
return this.object_;
};
/**
* Get the property expression.
* @return {ol.expression.Identifier} The property.
*/
ol.expression.Member.prototype.getProperty = function() {
return this.property_;
};
/**
* A logical not expression (e.g. `!foo`).

View File

@@ -558,6 +558,19 @@ describe('ol.expression.Member', function() {
expect(expr.evaluate(scope)).to.be(42);
});
});
var object = new ol.expression.Identifier('foo');
var property = new ol.expression.Identifier('bar');
var expr = new ol.expression.Member(object, property);
describe('#getObject()', function() {
expect(expr.getObject()).to.be(object);
});
describe('#getProperty()', function() {
expect(expr.getProperty()).to.be(property);
});
});