anchor.diff:  
     bool hasProperty(String property) => _obj.containsKey(property);
   
  -  //FIXME
  -  bool instanceof(JsFunction type) => _constructor == type;
  +  bool instanceof(JsFunction type) => _constructor == type ||
  +      (_constructor != null && _constructor.instanceof(type));
   }
   
   class JsProperty {
  +  final int id = JsObject._count++;
     final JsObject target;
     final JsFunction getter;
     final JsFunction setter;
     JsProperty(this.target, this.getter, this.setter);
  +  toString() => "JsProperty#$id";
   }
   
   JsObject _context = _contextCreate();
  
positive.code:   JsFunction _constructor;
    static int _count = 0;
    final int id = _count++;
    toString()=>"JsObject#${id}";
    JsObject.internal();
  
    /**
  
negative.code: library dom_stub.base;
  
  import 'dart:collection';
  
  const Object _UNDEFINED = const Object();
  const bool _isDebug = false;
  
  class JsFunction extends JsObject {
    final Function _function;
    JsFunction._internal(Function function)
        : _function = function,
          super.internal();
  
    JsFunction.internal(Function function)
        : _function = function,
          super.internal() {
      this["prototype"] = new JsObject.internal();
      this["apply"] = new JsFunction._internal((that, args) {
        return this.apply(args, thisArg: that);
      });
      this["call"] = new JsFunction._internal((that, [a1 = _UNDEFINED,
          a2 = _UNDEFINED, a3 = _UNDEFINED, a4 = _UNDEFINED, a5 = _UNDEFINED,
          a6 = _UNDEFINED, a7 = _UNDEFINED, a8 = _UNDEFINED, a9 = _UNDEFINED,
          a10 = _UNDEFINED]) {
        List args = [];
        if (a1 != _UNDEFINED) {
          args.add(a1);
        }
        if (a2 != _UNDEFINED) {
          args.add(a2);
        }
        if (a3 != _UNDEFINED) {
          args.add(a3);
        }
        if (a4 != _UNDEFINED) {
          args.add(a4);
        }
        if (a5 != _UNDEFINED) {
          args.add(a5);
        }
        if (a6 != _UNDEFINED) {
          args.add(a6);
        }
        if (a7 != _UNDEFINED) {
          args.add(a7);
        }
        if (a8 != _UNDEFINED) {
          args.add(a8);
        }
        if (a9 != _UNDEFINED) {
          args.add(a9);
        }
        if (a10 != _UNDEFINED) {
          args.add(a10);
        }
        return this.apply(args, thisArg: that);
      });
    }
  
    _getPrototypeValue(key) {
      var result;
      var prototype = (_obj["prototype"] as JsObject);
      if (prototype != null) {
        result = prototype._obj[key];
      }
      if (result == null) {
        if (_constructor != null) {
          return _constructor._getPrototypeValue(key);
        }
      }
      if (result == null) {
        return _UNDEFINED;
      } else {
        return result;
      }
    }
  
    /**
  