Тема: VBScript: создание пользовательского объекта
Иногда бывает удобно создать пользовательский объект, чтобы обращаться к его свойствам (полям) через точку. Например, такой объект может быть возвращаемым значением вашей функции. Самым естественным будет создать объект пользовательского класса:
VBScript: использование собственных классов
Есть и другой способ: использовать возможности создания объектов JScript.
Работаем с JScript через объект "htmlfile":
dim JS, tmp
sub InitializeJSEngine
set tmp = CreateObject("htmlfile")
set JS = tmp.parentWindow
JS.execScript "this.Create=eval;", "jscript"
end sub
'———————————————————————————————————————
InitializeJSEngine
function Sample
set Sample = JS.Create ("({a:""Свойство «a»"", b:""Свойство «b»"", c:""Свойство «c»""})")
end function
set b = Sample
msgbox b.a
Автор примера — JSman.
Работаем с JScript через объект "ScriptControl": ниже приведена функция, возвращающая объект. На входе — два массива одинаковой длины. Первый — список ключей, второй — список значений.
Function ReturnObject(Keys, Values)
Dim KL, KU, K
KL = LBound(Keys)
KU = UBound(Keys)
K = KU - KL
Dim VL, VU, V
VL = LBound(Values)
VU = UBound(Values)
V = VU - VL
If K <> V Then
Err.Raise 9 ' Subscript out of range
End if
Dim I, S()
Redim S(K)
For I = 0 To K
S(I) = Chr(34) & Keys(KL + I) & Chr(34) & ": " & Chr(34) & Values(VL + I) & Chr(34)
Next
Dim R, jse
R = "(function() { return { " & Join(S, ", ") & " }; })()"
Set jse = CreateObject("ScriptControl")
jse.Language = "JavaScript"
Set ReturnObject = jse.Eval(R)
End Function
Dim K, V, S
K = Array("proto", "host", "port")
V = Array("http", "localhost", 80)
Set S = ReturnObject(K, V)
WScript.Echo(S.host)
Автор примера — Rumata.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.