1

Тема: 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.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.