zoukankan      html  css  js  c++  java
  • lua OOP实现对象的链式调用

    数学中的链式法则

    http://sx.zxxk.com/ArticleInfo.aspx?InfoID=164649

    链式微分法则:

    实数运算的链式法则:

    对数运算的链式法则:

    平行公理的链式法则:

    向量运算的链式法则:

    JS对象链式调用方法

    http://stackoverflow.com/questions/15029309/how-to-write-jquery-chainable-functions-for-local-usinghttp://stackoverflow.com/questions/15029309/how-to-write-jquery-chainable-functions-for-local-using
    ar obj = {
        test : function(){ 
            alert("Y"); 
            return this; 
        },
        test2 : function(){ 
            alert("2"); 
            return this; 
        }
    }
    obj.test().test2(); // And so on since it returns this

    lua OOP实现

    --

    -- Class helper routines

    --

    -- Instantiates a class

    local function _instantiate(class, ...)

        local inst = setmetatable({__class=class}, {__index = class})

        if inst.__init__ then

            inst:__init__(...)

        end

        return inst

    end

     

     

    --- Create a Class object (Python-style object model).

    -- The class object can be instantiated by calling itself.

    -- Any class functions or shared parameters can be attached to this object.

    -- Attaching a table to the class object makes this table shared between

    -- all instances of this class. For object parameters use the __init__ function.

    -- Classes can inherit member functions and values from a base class.

    -- Class can be instantiated by calling them. All parameters will be passed

    -- to the __init__ function of this class - if such a function exists.

    -- The __init__ function must be used to set any object parameters that are not shared

    -- with other objects of this class. Any return values will be ignored.

    -- @param base The base class to inherit from (optional)

    -- @return A class object

    -- @see instanceof

    -- @see clone

    function class(base)

        -- __parent 属性缓存父类,便于子类索引父类方法

        return setmetatable({__parent = base}, {

            __call = _instantiate,

            __index = base

        })

    end

     

     

    --- Test whether the given object is an instance of the given class.

    -- @param object Object instance

    -- @param class Class object to test against

    -- @return Boolean indicating whether the object is an instance

    -- @see class

    -- @see clone

    function instanceof(object, class)

        local meta = getmetatable(object)

        while meta and meta.__index do

            if meta.__index == class then

                return true

            end

            meta = getmetatable(meta.__index)

        end

        return false

    end

     

     

    local ChainClass = class()

    ChainClass.setFlag = function ( self, flag )

        self.flag = flag

        print("set flag = "..flag)

        return self

    end

     

     

    ChainClass.setType = function ( self, type )

        self.type = type

        print("set type = "..type)

        return self

    end

     

     

    ChainClass.printAttrs = function ( self, flag )

        for k,v in pairs(self) do

      print("name="..k.." value="..tostring(v))

        end

        return self

    end

     

     

    local chainObj = ChainClass()

     

    chainObj:setFlag(1):setType(2):printAttrs()

  • 相关阅读:
    MQTT TLS 加密传输
    python多进程并发redis
    各种消息队列的特点
    mqtt异步publish方法
    Numpy API Analysis
    Karma install steps for unit test of Angular JS app
    reinstall bower command
    Simulate getter in JavaScript by valueOf and toString method
    How to: Raise and Consume Events
    获取对象的类型信息 (JavaScript)
  • 原文地址:https://www.cnblogs.com/lightsong/p/5738649.html
Copyright © 2011-2022 走看看