anchor.diff:  /// TODO(jakemac): Use expando to cache js arrays that mirror dart lists?
   dynamic jsValue(dartValue) {
     if (dartValue is JsObject) {
  +    // A JsObject created from dart, and then passed to JS. Set itself as the
  +    // dart instance so it doesn't get converted to a Map/List on the way back.
  +    addDartInstance(dartValue, dartValue);
       return dartValue;
     } else if (dartValue is JsProxyInterface) {
       return dartValue.jsProxy;
  
positive.code: }
  
  Type _dartType(JsFunction jsValue) {
    if (jsValue == context['String']) {
      return String;
    } else if (jsValue == context['Number']) {
      return num;
    } else if (jsValue == context['Boolean']) {
      return bool;
    } else if (jsValue == context['Array']) {
      return List;
    } else if (jsValue == context['Date']) {
      return DateTime;
    } else if (jsValue == context['Object']) {
      return Map;
    }
    // Unknown type
  
negative.code: 
  /// Adds a reference to the original dart instance to a js proxy object.
  void addDartInstance(JsObject jsObject, dartInstance) {
    jsObject['__dartClass__'] = dartInstance;
  }
  
  /// Gets a reference to the original dart instance from a js proxy object.
  dynamic getDartInstance(JsObject jsObject) => jsObject['__dartClass__'];
  
  final _Object = context['Object'];
  final _String = context['String'];
  final _Number = context['Number'];
  final _Boolean = context['Boolean'];
  final _Array = context['Array'];
  final _Date = context['Date'];
  