add watch function
重构watch函数