support more complex objects
support a thisArg pattern