use prototype when convenient