在網上看到這樣一段**,真是誤人子弟呀,具體就是:
lua類的定義
**如下:
local clsnames ={}local __setmetatable =setmetatable
local __getmetatable =getmetatable
function class(classname, basecls)
if classname ==nil then
bxlog.e(
"classname can't be nil")
return
nil end
ifclsnames[classname] then
bxlog.e(
"has create the same name,
"..classname)
return
nil end
clsnames[classname] = true
local cls =nil
ifbasecls then
cls =basecls:create()
else
cls ={}
endcls.m_cn =classname
cls.getclassname =function(self)
local mcls =__getmetatable(self)
return
mcls.m_cn
endcls.create =function(self, ...)
local newcls ={}
__setmetatable(newcls, self)
self.__index =self
newcls:__init(...)
return
newcls
endreturn
clsend
這個**的邏輯:
1.建立乙個類,其實是建立了乙個父類的物件。
然後指定自己的create.
2.建立乙個類的物件,其實就是建立乙個表,這個表的元表設定為自己。然後呼叫初始化。
上面是錯誤的思路。
----------------------------------------
我的理解:
1.建立類:建立乙個表, 且__index指向父類。
2.建立物件:建立乙個表,元表設定為類。
### 就是這麼簡單,只要看下面的cls 和inst 兩個表就可以了。
我來重構,如下為核心**:
function class(classname, basecls)local cls ={}
ifbasecls then
cls.__index =basecls
endfunction call(self, ... )
local inst ={}
inst.__index = self--靜態成員等。
setmetatable(inst, self)
inst:__init(...)
return
inst
endcls.__call =call
return
clsend
Jsonp原理就是這麼簡單
原理 包裹資料的js資料檔案,自動執行,找到目標函式,通過傳參,把資料注入進去。當你開啟本篇博文,證明你已經大體知道了jsonp的作用了。但如果你需要我介紹一下,我也可以簡單介紹 簡單說,就是解決 跨域 請求資料的作用。跨域 不同網域名稱 不同ip 不同埠的資料訪問,都屬於跨域。js本身對跨域資料請...
理解ERP就是這麼簡單
家 中 請 客 訂貨意向 妻子 當然可以,來幾個人,幾點來,想吃什麼菜?丈夫 6個人,我們7點左右回來,準備些酒 烤鴨 番茄炒蛋 冷盤 蛋花湯。你 看可以嗎?商務溝通 妻子 沒問題,我會準備好的,訂單確認 妻子記錄下需要做的選單 mps計畫 具體要準備的菜 鴨 酒 番茄 雞蛋 作 油。bom物料清單...
TCP IP協議 就是這麼簡單
核心協議在使用者網路作業系統安裝的tcp ip協議模組是一系列相互聯絡的協議,所有其他應用程式和tcp ip協議套件中的其他協議都依賴於tcp ip核心協議所提供的基本協議。這些協議包括 ip arp icmp igmp tcp和udp。應用層協議因為僅僅在具體的網路環境中,僅僅是核心協議是不夠的 ...