lua学习:lua实现面向对象

Posted losophy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua学习:lua实现面向对象相关的知识,希望对你有一定的参考价值。

之前写过一篇关于lua实现面向对象的文章,借助元表和元方法实现,感觉也是有点乱。

我们可以参考cocos2d-x自己给出的类的实现,也即在luaBinding目录下extern.lua的文件中给出的实现:

function class(classname, super)
    -- print(classname)
    local superType = type(super)
    local cls

    if superType ~= "function" and superType ~= "table" then
        superType = nil
        super = nil
    end

    if superType == "function" or (super and super.__ctype == 1) then
        -- inherited from native C++ Object
        cls = {}

        if superType == "table" then
            -- copy fields from super
            print ("superTyper is table");
            for k,v in pairs(super) do cls[k] = v end
            cls.__create = super.__create
            cls.super    = super
        else
            cls.__create = super
            cls.ctor = function() end
        end

        cls.__cname = classname
        cls.__ctype = 1

        function cls.new(...)
            local instance = cls.__create(...)
            -- copy fields from class to native object
            for k,v in pairs(cls) do instance[k] = v end
            instance.class = cls
            instance:ctor(...)
            return instance
        end

    else
        -- inherited from Lua Object
        if super then
            cls = {}
            setmetatable(cls, {__index = super})
            cls.super = super
        else
            cls = {ctor = function() end}
        end

        cls.__cname = classname
        cls.__ctype = 2 -- lua
        cls.__index = cls

        function cls.new(...)
            local instance = setmetatable({}, cls)
            instance.class = cls
            instance:ctor(...)
            return instance
        end
    end

    return cls
end

 

创建对象时,可以通过className.new这种方式来创建,如

local MySpriteClass = class("MySpriteClass",cc.Sprite)

function MySpriteClass:ctor()

end

return MySpriteClass

 

mySpriteClass 实例创建

local mySprite = MySpriteClass.new(xxx.png)

 

 参考:

userdate和table类型的效率对比

class语法糖要注意了

cocos-lua学习笔记(五)cocos2d-Lua类的实现

以上是关于lua学习:lua实现面向对象的主要内容,如果未能解决你的问题,请参考以下文章

Lua面向对象----类继承多继承单例的实现

lua面向对象是怎么实现的

cocos2d-Lua02Lua面向对象

Lua实现面向对象

lua 面向对象编程类机制实现

Lua面向对象设计(转)