1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
ZO_Object = { }
--
-- The new instance of the object needs an index table.
-- This next statement prefers to use "template" as the
-- index table, but will fall back to self.
-- Without the proper index table, your new object will
-- not have the proper behavior.
--
template = template or self
--
-- This call to setmetatable does 3 things:
-- 1. Makes a new table.
-- 2. Sets its metatable to the "index" table
-- 3. Returns that table.
--
--
-- Obtain the metatable of the newly instantiated table.
-- Make sure that if the user attempts to access newObject[key]
-- and newObject[key] is nil, that it will actually fall
-- back to looking up template[key]...and so on, because template
-- should also have a metatable with the correct __index metamethod.
--
return newObject
end
--
-- This is just a convenience function/semantic extension
-- so that objects which need to inherit from a base object
-- use a clearer function name to describe what they are doing.
--
end
local parentClasses = { ... }
{
end
end
end
} )
end
--[[
Here is a simple multiple inheritence example:
local A = ZO_Object:Subclass()
function A:InitializeA()
self.name = "A"
end
local B = ZO_Object:Subclass()
function B:InitializeB()
self.text = "B"
end
C = ZO_Object.MultiSubclass(A, B)
function C:New()
local obj = ZO_Object.New(self)
obj:Initialize()
return obj
end
function C:Initialize()
self:InitializeA()
self:InitializeB()
end
]] -- |