lua的self

lua中self指的是当前方法所属的table。一般来讲self可以理解为当前对象,但是在创建一个“类”的实例的时候,它代表的确是基类,而非当前对象。

下面上代码:

 1 base = {}
 2 
 3 function base:new(id)
 4     local o = {}
 5     setmetatable(o, self)
 6     self.__index = self
 7     self.gg= id                   ------------此处的self指的是base这个table,而不是你新创建的o。此处对self的操作,会影响其他实例。因为base被改变了
 8     return o
 9 end
10 
11 function base:add(v)
12     self.gg = v                  -------------此处self指的是当前实例,即new方法中的o,而不是base
13 end
14 
15 a1 = base:new(12)
16 a2 = base:new(4)    -------修改了所有以base为metatable的实例(table)
17 
18 print(a1.gg)  -- 这里显示的是4,如果把new方法中的self.gg=id改为 o.gg=id,那么此处显示12
19 a2:add(13)
20 print(a1.gg)  -- 由于add方法修改的self是当前实例,而不是base,因此a2的add方法,不会影响a1
21 print(a2.gg)

 

posted on 2013-12-05 13:46  二哥算站起来了  阅读(2850)  评论(1编辑  收藏  举报