萬物皆值: 函式也是一種值正式這個特點我們可以使用 table (陣列)構建乙個包含有屬性和方法的 table,這個table 就可以被我們當做物件來使用
tbl1 =
tbl2 = {}
setmetatable(tbl2,)
print(tbl2.a) --輸出1
metastable可以用來改變table的行為,如__index表示查詢元素的行為
這裡執行 tbl2.a 的時候,由於tbl2沒有a這個key對應的value,會到metatable中去查詢,metatable中有__index這個key對應的值tbl1,所以最終會到tbl1中去 查詢a對應的value,最後得到1。
dog = -- hello,dahuang
function
dog:new
(dog)
-- body
dog = dog or {}
setmetatable(dog,self)
self.__index = self
return dog
endfunction
dog:eat
() -- body
print(self.name, "eat something...")
endfunction
dog:getname
() -- body
return self.name
endfunction
dog:setname
(name)
-- body
self.name = name
endd = dog:new()
d:eat() -- 輸出: dahuang eat something...
print(d:getname()) -- 輸出: dahuang
d:setname("hachi") -- 八公
print("change name:",d:getname()) -- 輸出: hachi
setmetatable(dog,self)這裡是為新的物件 dog 設定了 metatable ,改變了__index的行為,即方法體是通過 metatable 來呼叫的self.__index = self
husky = dog:new()
-- derived class method new
function
husky:new
(dog)
dog = dog or dog:new(dog)
setmetatable(dog, self)
self.__index = self
return dog
endfunction
husky:eat
() -- body
print("husky eat meat...")
endh = husky:new()
h:eat() --輸出:husky eat meat...
h:setname("erha")
print(h:getname()) --輸出:erha
繼承乙個基類,來擴充套件派生類的方法,派生類中保留了基類的成員變數和方法,也可以重寫覆蓋基類中的成員或者方法 java之物件導向
類是用於描述同一型別的物件的乙個抽象。類中定義了這一類物件所具有的靜態和動態屬性 靜態屬性 成員變數 動態屬性 方法 1 類可以看成是一類物件的模板,物件可以看成該類的乙個具體例項 2 首先必須定義類才能有物件 說到類,就不得不說構造其構造方法了 在new乙個物件是,呼叫的就是類中的構造方法 列如p...
static之物件導向
一 靜態資料成員子 includeusing namespace std class point int point num 0 定義靜態資料成員 int main 對於類的非靜態資料成員,每個類物件都有自己的拷貝。而對於靜態資料成員被當作是類的成員。就像上述例子中,雖然定義了4個物件,但是靜態資料...
JS之物件導向
一,面對物件初始 為什麼要學習物件 1,js獲取頁面元素,操作頁面元素內容與樣式,資料面對物件思想讓運算元更加便捷與容易 優點 1,拓展性強,2,減少 冗餘3,降低成本 二,物件屬性解決迴圈繫結變數汙染問題 1,物件的 臨時 屬性可以幫助臨時資料的儲存,因為臨時資料的生命週期往往很短,需要提示臨時資...