GetMethod

检索方法的实现函数.

Method := GetMethod(Value , Name, ParamCount)

参数

Value

类型: Any

除了 ComObject 之外的任何类型的任何值.

Name

类型: 字符串

省略此参数, 对 Value 本身进行验证, 如果成功, 则返回 Value. 否则, 请指定要检索的方法的名称.

ParamCount
类型: 整数

如果省略(或者参数数没有被验证), 则会对 Call 方法进行基本检查, 以验证该对象可调用的.

否则, 请指定将被传递给方法或函数的参数数量. 如果指定, 可以查询该方法的 MinParams, MaxParams 和 IsVariadic 属性, 以验证它是否可以接受这个参数指定的数量. 如果这些属性不存在, 参数数就不会被验证.

这个计数不应该包括隐含的 this 参数.

返回值

类型: 函数对象

函数返回包含方法实现的函数对象, 如果省略了 Name, 则返回 Value 本身.

错误

如果没有找到该方法或在没有调用属性获取器(getter) 的情况下不能被检索到, 则抛出 MethodError.

如果尝试验证, 可能会因为查询方法的属性而抛出异常. 如果验证失败, 则抛出 ValueErrorMethodError.

备注

方法可以通过以下方式来定义:

当调用函数对象时, 需要为通常隐藏的 this 参数提供一个值. 例如, Method(Value, Parameters*).

尽管 GetMethod 的标准实现有上述限制, 但如果使用 Value.GetMethod(Name) 而不是 GetMethod(Value, Name), 对象 Value 可以定义自己的 GetMethod 的实现.

GetMethod(Value, "Call", N) 不等同于 GetMethod(Value,, N), 因为 Call 方法将函数对象本身作为参数, 而且其用法可能与 Value 的用法不同. 例如, Func.Prototype.Call 是一个单一的方法, 适用于所有内置和用户定义的函数, 因此必须接受任何数量的参数.

Objects, HasMethod, HasBase, HasProp

示例

检索并报告有关 GetMethod 方法的信息.

method := GetMethod({}, "GetMethod")  ; 这也是一种方法.
MsgBox method.MaxParams  ; 接受 2 个参数, 包括 'this'.
MsgBox method = GetMethod  ; 在这种情况下, 实际上是同一个对象.