anchor.diff:     * supplied it is the value of `this` for the invocation.
      */
     dynamic apply(List args, {thisArg}) {
  +    if (_isDebug){print("$this apply args:$args this:$thisArg");}
       if (thisArg == null) {
         thisArg = this;
       }
  -    if (args == null){
  +    if (args == null) {
         args = [];
       }
       return Function.apply(_function, [thisArg]..addAll(args));
     }
  -  toString()=>"JsFunction#${id}";
  +  @override
  +  toString() => "JsFunction#${id}";
   }
   
   class JsArray<E> extends JsObject with ListMixin<E> {
  
positive.code:   }
  
    operator [](property) {
  //    print("get prop: $property");
      var value = null;
      if (!_obj.containsKey(property)){
        if (_constructor!=null && _constructor != this) {
          value = _constructor._obj["prototype"][property];
        }
      } else {
        value = _obj[property];
      }
      if (value is JsProperty) {
        return (value as JsProperty).getter.apply([value], thisArg: this);
      }
      return value;
    }
  
    operator []=(property, value) {
  //    print("set prop: $property, $value");
      var current = _obj[property];
      if (current is JsProperty) {
        (current as JsProperty).setter.apply([value], thisArg: this);
      } else {
        _obj[property] = value;
      }
    }
  
    callMethod(String method, [List args]) {
      return (this[method] as JsFunction).apply(args, thisArg: this);
    }
  
  
negative.code:   JsFunction _constructor;
    static int _count = 0;
    final int id = _count++;
    @override
    toString() => "JsObject#${id}";
    JsObject.internal();
  
    /**
  