local Component = class("Component") function Component:ctor(name) self.name_ = name end function Component:getName() return self.name_ end function Component:getTarget() return self.target_ end function Component:exportMethods_(methods) self.exportedMethods_ = methods local target = self.target_ local name = self.name_ local com = self for _, key in ipairs(methods) do if not target[key] then target[key] = function(__, ...) local r = {com[key](self, ...)} if r[1] == self then r[1] = target end return unpack(r) end end end return self end function Component:bind_(target) if self.target_ then return; end self.target_ = target self:onActivate(target) end function Component:unbind_() if self.target_ == nil then return; end if self.exportedMethods_ then local target = self.target_ for _, key in ipairs(self.exportedMethods_) do target[key] = nil end end self:onDeactivate() self.target_ = nil; end function Component:onActivate() end function Component:onDeactivate() end return Component