fix "exceeding maximum call stack" error which caused by mistakenly calling to self.on