anchor.diff:      var dartList = getDartInstance(jsValue);
       if (dartList != null) return dartList;
       dartList = jsValue.map((item) => dartValue(item)).toList();
  +    _jsArrayExpando[dartList] = jsValue;
       addDartInstance(jsValue, dartList);
       return dartList;
     } else if (jsValue is JsFunction) {
  
positive.code:   if (dartValue is JsProxyInterface) {
      return dartValue.jsProxy;
    } else if (dartValue is Iterable) {
      var newList = jsArrayExpando[dartValue];
      if (newList==null) {
        newList = new JsArray.from(dartValue.map((item) => jsValue(item)));
        jsArrayExpando[dartValue] = newList;
        addDartInstance(newList, dartValue);
      }
      return newList;
    } else if (dartValue is Map) {
      var newMap = new JsObject(_Object);
      dartValue.forEach((k, v) {
        newMap[k] = jsValue(v);
      });
      addDartInstance(newMap, dartValue);
      return newMap;
    } else if (dartValue is DateTime) {
      return new JsObject(_Date, [dartValue.millisecondsSinceEpoch]);
  
negative.code:   JsObject get jsProxy;
  }
  
  Expando<JsArray> _jsArrayExpando = new Expando<JsArray>();
  Expando<JsObject> _jsMapExpando = new Expando<JsObject>();
  
  /// Converts a dart value to a js value, using proxies when possible.
  /// TODO(jakemac): Use expando to cache js arrays that mirror dart lists?
  