從變量到數(shù)組再到對(duì)象,我們打了一系列的比喻,形象的說(shuō)明了它們的含義。我們把變量比作吃飯的碗,數(shù)組是多功能飯盒,對(duì)象呢還是飯盒,但是不是簡(jiǎn)單的飯盒,特點(diǎn)是允許自定義它的行為。這個(gè)飯盒中支持方法(函數(shù)),具有屬性,靈活應(yīng)用,威力無(wú)窮,這樣呢,她就更加神秘和抽象了,讓我們一起來(lái)領(lǐng)略一下她的風(fēng)采吧!
首先了解一下什么是對(duì)象的方法,方法就是對(duì)象的函數(shù)(可以先簡(jiǎn)單這么理解)。每個(gè)方法都有一個(gè)名稱為 this 的隱藏參數(shù), 它實(shí)際上包含了指向繼承自此類的對(duì)象的引用。不過(guò), 它也可以包含指向此類自身或派生類的引用, 取決于如何調(diào)用這個(gè)方法。 方法被通過(guò)引用存儲(chǔ)到類對(duì)象中。
上邊已經(jīng)講到對(duì)象的創(chuàng)建方法{}、[]、Object() 和 Array() 和釋放方法,想必大家也都了解了!
此外,對(duì)象還支持以下的方法:
- InsertAt / RemoveAt
- Push / Pop
- Delete
- MinIndex / MaxIndex / Length
- SetCapacity / GetCapacity
- GetAddress
- _NewEnum
- HasKey
- Clone
- ObjRawSet (函數(shù))
棄用的 (不推薦使用):
- Insert
- Remove
每個(gè)方法都有對(duì)應(yīng)的 obj前綴函數(shù), 這樣可以區(qū)別于自定義行為創(chuàng)建的對(duì)象
這些 obj前綴函數(shù)是被推薦專門用于此目的的函數(shù)。
要調(diào)用這種函數(shù), 函數(shù)名稱的前綴為 "Obj" 然后傳遞目標(biāo)對(duì)象作為第一個(gè)參數(shù)。例如:
array := [1, 2, 3]
MsgBox % ObjMaxIndex(array) " = " array.MaxIndex()
如果 "obj" 前綴函數(shù) 的參數(shù)對(duì)象或值的類型不正確,它將返回空字符串。
下邊我們就拿InsertAt 作為例子詳細(xì)講解一下,其他的方法請(qǐng)自行查閱幫助哈!
InsertAt 插入一個(gè)或多個(gè)值到線性數(shù)組中的給定序號(hào)位置中。
Object.InsertAt(Pos, Value1 [, Value2, 。。。 ValueN])
Pos
要將 Value1 插入到數(shù)組中的序號(hào)數(shù)字。 隨后的值將插入到 Pos+1
, Pos+2
, 等等。
Value1 。。。
要插入數(shù)組的一個(gè)或多個(gè)值。 要將另一個(gè)數(shù)組中的值一次性插入, 傳遞 theArray* 作為最后一個(gè)參數(shù)。
備注
InsertAt
對(duì)應(yīng)的是 RemoveAt
。
作為關(guān)聯(lián)數(shù)組對(duì)象, Pos
的整數(shù)值同時(shí)也成為 Value1
在數(shù)組對(duì)象中的鍵名。 位于 Pos
之前或之后的鍵值對(duì)都會(huì)被自動(dòng)改為正確的對(duì)應(yīng)關(guān)系數(shù)值,哪怕鍵對(duì)應(yīng)的值不存在也是如此 (因?yàn)閷?duì)象是稀疏數(shù)組)。 例如:
x := []
x.InsertAt(1, "A", "B") ; => ["A", "B"]
x.InsertAt(2, "C") ; => ["A", "C", "B"]
; 稀疏(不連續(xù))/未賦值 元素也被保留:
x := ["A", , "C"]
x.InsertAt(2, "B") ; => ["A", "B", , "C"]
x := ["C"]
x.InsertAt(1, , "B") ; => [ , "B", "C"]
InsertAt 最好僅用于處理對(duì)象中的整數(shù)鍵表示線性數(shù)組中位置的情況。如果對(duì)象中包含不連續(xù)的任意值整數(shù)鍵,比如 ID (不連續(xù)的序號(hào)) 或 handles (句柄), InsertAt 會(huì)產(chǎn)生出乎意料的效果。 例如:
x := [], handleX := 0x4321, handleY := 0x1234
x.InsertAt(handleX, "A")
MsgBox % x[handleX] ; A - 正確
x.InsertAt(handleY, "B")
MsgBox % x[handleX] ; 返回空值
MsgBox % x[handleX+1] ; 這才是 "B" 的正確 "位置"
InsertAt
不會(huì)影響文本或?qū)ο箧I, 所以可以安全的用于混合鍵類型的對(duì)象。
好了今天的文章就到這里,一定要掌握對(duì)象的方法,才能了解她,這是她的小脾氣。