Scorpio 表

2021-06-08 21:01 更新
//臨時的表,因為加了 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)
				}




以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號