--首先第一步需要是克隆,是为了能够实现子类拥有父类的所有函数和成员变量
function clone(object)
local lookup_table = {}local function _copy(object)
if type(object) ~= "table" then --只有是table 那么我们才进行一个递归拷贝
return object
elseif lookup_table[object] then --再拷贝的过程当中可能会遇到相同的地址的table。比如原table可能就有重复的索引。
-- 这里全部认为是一个,因为table本来就是传的引用,改一个等于改全部。
end
local new_table = {}
lookup_table[object] = new_table
for key, value in pairs(object) do
new_table[_copy(key)] = _copy(value) --key值也可能是个table,也可能是个函数,这个在lua 语法上面是没有限制的。
end
return setmetatable(new_table, getmetatable(object)) --复制元表。
end
return _copy(object)
end