从变量到数组再到对象,我们打了一系列的比喻,形象的说明了它们的含义。我们把变量比作吃饭的碗,数组是多功能饭盒,对象呢还是饭盒,但是不是简单的饭盒,特点是允许自定义它的行为。这个饭盒中支持方法(函数),具有属性,灵活应用,威力无穷,这样呢,她就更加神秘和抽象了,让我们一起来领略一下她的风采吧!
首先了解一下什么是对象的方法,方法就是对象的函数(可以先简单这么理解)。每个方法都有一个名称为 this 的隐藏参数, 它实际上包含了指向继承自此类的对象的引用。不过, 它也可以包含指向此类自身或派生类的引用, 取决于如何调用这个方法。 方法被通过引用存储到类对象中。
上边已经讲到对象的创建方法{}、[]、Object() 和 Array() 和释放方法,想必大家也都了解了!
此外,对象还支持以下的方法:
- InsertAt / RemoveAt
- Push / Pop
- Delete
- MinIndex / MaxIndex / Length
- SetCapacity / GetCapacity
- GetAddress
- _NewEnum
- HasKey
- Clone
- ObjRawSet (函数)
弃用的 (不推荐使用):
- Insert
- Remove
每个方法都有对应的 obj前缀函数, 这样可以区别于自定义行为创建的对象
这些 obj前缀函数是被推荐专门用于此目的的函数。
要调用这种函数, 函数名称的前缀为 "Obj" 然后传递目标对象作为第一个参数。例如:
array := [1, 2, 3]
MsgBox % ObjMaxIndex(array) " = " array.MaxIndex()
如果 "obj" 前缀函数 的参数对象或值的类型不正确,它将返回空字符串。
下边我们就拿InsertAt 作为例子详细讲解一下,其他的方法请自行查阅帮助哈!
InsertAt 插入一个或多个值到线性数组中的给定序号位置中。
Object.InsertAt(Pos, Value1 [, Value2, 。。。 ValueN])
Pos
要将 Value1 插入到数组中的序号数字。 随后的值将插入到 Pos+1
, Pos+2
, 等等。
Value1 。。。
要插入数组的一个或多个值。 要将另一个数组中的值一次性插入, 传递 theArray* 作为最后一个参数。
备注
InsertAt
对应的是 RemoveAt
。
作为关联数组对象, Pos
的整数值同时也成为 Value1
在数组对象中的键名。 位于 Pos
之前或之后的键值对都会被自动改为正确的对应关系数值,哪怕键对应的值不存在也是如此 (因为对象是稀疏数组)。 例如:
x := []
x.InsertAt(1, "A", "B") ; => ["A", "B"]
x.InsertAt(2, "C") ; => ["A", "C", "B"]
; 稀疏(不连续)/未赋值 元素也被保留:
x := ["A", , "C"]
x.InsertAt(2, "B") ; => ["A", "B", , "C"]
x := ["C"]
x.InsertAt(1, , "B") ; => [ , "B", "C"]
InsertAt 最好仅用于处理对象中的整数键表示线性数组中位置的情况。如果对象中包含不连续的任意值整数键,比如 ID (不连续的序号) 或 handles (句柄), InsertAt 会产生出乎意料的效果。 例如:
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
不会影响文本或对象键, 所以可以安全的用于混合键类型的对象。
好了今天的文章就到这里,一定要掌握对象的方法,才能了解她,这是她的小脾气。