function JsExprContext(opt_data, opt_parent) {
  var me = this;

  /**
   * The local context of the input data in which the jstemplate
   * expressions are evaluated. Notice that this is usually an Object,
   * but it can also be a scalar value (and then still the expression
   * $this can be used to refer to it). Notice this can be a scalar
   * value, including undefined.
   *
   * @type {Object}
   */
  me.data_ = opt_data;

  /**
   * The context for variable definitions in which the jstemplate
   * expressions are evaluated. Other than for the local context,
   * which replaces the parent context, variable definitions of the
   * parent are inherited. The special variable $this points to data_.
   *
   * @type {Object}
   */
  me.vars_ = {};
  if (opt_parent) {
    copyProperties(me.vars_, opt_parent.vars_);
  }
  this.vars_[VAR_this] = me.data_;
}
Context for processing a jstemplate. The context contains a context
object, whose properties can be referred to in jstemplate
expressions, and it holds the locally defined variables.

@param {Object} opt_data The context object. Null if no context.

@param {Object} opt_parent The parent context, from which local
variables are inherited. Normally the context object of the parent
context is the object whose property the parent object is. Null for the
context of the root object.

@constructor