code: @Override
      public Scriptable construct(Context cx, Scriptable scope, Object[] args)
      {
          Scriptable myDelegee = getDelegee();
          if (myDelegee == null) {
              //this little trick allows us to declare prototype objects for Delegators
              Delegator n = newInstance();
              Scriptable delegee;
              if (args.length == 0) {
                  delegee = new NativeObject();
              } else {
                  delegee = ScriptRuntime.toObject(cx, scope, args[0]);
              }
              n.setDelegee(delegee);
              return n;
          }
          return ((Function)myDelegee).construct(cx, scope, args);
      }
docs: Note that if the <code>delegee</code> is <code>null</code>,
  this method creates a new instance of the Delegator itself
  rathert than forwarding the call to the
  <code>delegee</code>. This permits the use of Delegator
  prototypes.
  
  @param cx the current Context for this thread
  @param scope an enclosing scope of the caller except
  when the function is called from a closure.
  @param args the array of arguments
  @return the allocated object
  
  @see Function#construct(Context, Scriptable, Object[])