//臨時的表,因為加了 var關(guān)鍵字 var base = { ise;//如果沒有值則默認(rèn)是null值,框架的舊腳本可能不支持默認(rèn)null,所以應(yīng)當(dāng)直接賦值null //表里的屬性變量不要用var局部變量 value1 = 100; vau2 = '你是誰' 4cscs = null function hello1(){ //this是本層的意思,而本層是base表 print("hello1 " + this.value1 ) } function hello2() { print("base hello2") } } //表的初始化 和 this 問題 一開始是 逐句的解析 和構(gòu)造 表,所以執(zhí)行到this的時候,this還沒賦予,所以一開始是沒有this的,所以如果這樣做是錯誤的 var ta = { b = 6; //最新腳本已經(jīng)增加了"后申請的變量使用前申請的變量,而不用this"的功能,所以最新腳本可以使用 //而 框架用的版本沒有增加,所以用框架的腳本會錯誤 a = b + 5; //最新腳本已經(jīng)增加了初始化時變量可以使用函數(shù)功能,不管該函數(shù)是在表里的哪里定義的都可以調(diào)用(函數(shù)里面的this也可以用了) //但注意的是,函數(shù)里的this要是使用到了沒有賦值的變量,例如使用到了還沒賦值的 g,就會獲取到null,導(dǎo)致隱形錯誤問題 //而 框架用的版本沒有增加,所以用框架的腳本會錯誤, k = d();//最新腳本賦予值是 "6null" ,框架里使用的舊版錯誤 function d(){ return "6" + this.g };//g還沒有初始化,所以是null g = 99;//逐句的解析到這里,g才初始化為99 } //建議是寫一個初始化方法,解析了表后,就執(zhí)行它的初始化,這樣就不必要糾結(jié)這些 初始化問題 var ta = { a = null; k = null; function init(){ this.a = 6; this.k = "6" + this.a; } } ta.init(); //能通過[]去訪問數(shù)字的變量,不推薦使用,推薦使用 腳本數(shù)組 //能通過[]去訪問變量名稱, 但不推薦使用 base[ "vau2" ]; //對于不存在的元素,也可以訪問的,值是null base[ "dc" ] == null; //可以增加新的成員賦值 base[ 'fun' ] = function(){};//函數(shù) base[ 'fun2' ] = {};//表 //復(fù)制一份該表的內(nèi)容,這樣就存在2個base表了(這就等于是 c#里的new) var tm = clone( base ); //a繼承了 base 和 附加新的內(nèi)容 var a = base + { value2 = 200, function hello2() { print("a : hello2 " + this.value2) } } //b繼承了 base 和 附加空的內(nèi)容 var b = base + {} a.value1 = 300 a.hello1() //輸出 hello1 300 a.hello2() //輸出 a : hello2 200 ,因為其的 新hello2覆蓋了父的base的hello2 b.hello1() //輸出 hello1 100 b.hello2() //輸出 base hello2 //用 + += 可以實現(xiàn)偽繼承 相加的數(shù)據(jù)都是clone的,所以相互的數(shù)據(jù)不會共享,可以 實現(xiàn)抽象和繼承,但不推薦腳本繼承 //完全復(fù)制一個table 里面的數(shù)據(jù)不會共享 var base1 = clone(base) var base2 = clone(base) base1.value1 = 300 //可以將 表當(dāng)成 關(guān)鍵字容器 使用,從性能角度,也推薦使用表去代表 c#的容器 //空的表,用來作為 關(guān)鍵字 容器的 c = {}; //假設(shè)填進(jìn)數(shù)據(jù) for( var i = 0; i < 10; i ++ ){ for( var k = 0; k < 10; k ++ ){ //要是沒有這個變量數(shù)據(jù),它會自動賦予的 c[ i + "x" + k ] = i + "x" + k; } } " " + c[ 1000 ];//輸出值是 null //遍歷輸出它們 foreach( var xpair in vpairs( table.keys( c ) ) ){ "> " + xpair; } //表像c#那樣 只讀遍歷 //數(shù)組array也是這樣遍歷的 var tab = {a = 100, b = 200, c = 300, d = 400} //獲得表的數(shù)量,看 最上面的導(dǎo)航 "table表" table.count(tab) //可以獲得索引+元素 foreach ( var p in pairs(tab)) { print(p.key + " = " + p.value) } //可以直接獲得表的元素 foreach (var p in kpairs(tab)) { print(p) } //可以直接獲得表的元素 foreach (var p in vpairs(tab)) { print(p) }
更多建議: