<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: создание пользовательского объекта]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=4177</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=4177&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: создание пользовательского объекта».]]></description>
		<lastBuildDate>Mon, 15 Feb 2010 13:32:38 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBScript: создание пользовательского объекта]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=33067#p33067</link>
			<description><![CDATA[<p>Иногда бывает удобно создать пользовательский объект, чтобы обращаться к его свойствам (полям) через точку. Например, такой объект может быть возвращаемым значением вашей функции. Самым естественным будет создать объект пользовательского класса:<br /><a href="http://forum.script-coding.com/viewtopic.php?id=1245">VBScript: использование собственных классов</a></p><p>Есть и другой способ: использовать возможности создания объектов JScript.<br />Работаем с JScript через объект &quot;htmlfile&quot;:<br /></p><div class="codebox"><pre><code>dim JS, tmp
sub InitializeJSEngine
  set tmp = CreateObject(&quot;htmlfile&quot;)
  set JS = tmp.parentWindow
  JS.execScript &quot;this.Create=eval;&quot;, &quot;jscript&quot;
end sub
&#039;———————————————————————————————————————
InitializeJSEngine

function Sample
set Sample =  JS.Create (&quot;({a:&quot;&quot;Свойство «a»&quot;&quot;, b:&quot;&quot;Свойство «b»&quot;&quot;, c:&quot;&quot;Свойство «c»&quot;&quot;})&quot;)
end function

set b = Sample

msgbox b.a</code></pre></div><p>Автор примера — <strong>JSman</strong>.</p><p>Работаем с JScript через объект &quot;ScriptControl&quot;: ниже приведена функция, возвращающая объект. На входе — два массива одинаковой длины. Первый — список ключей, второй — список значений.<br /></p><div class="codebox"><pre><code>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 &lt;&gt; V Then
        Err.Raise 9 &#039; Subscript out of range
    End if

    Dim I, S()

    Redim S(K)

    For I = 0 To K
        S(I) = Chr(34) &amp; Keys(KL + I) &amp; Chr(34) &amp; &quot;: &quot; &amp; Chr(34) &amp; Values(VL + I) &amp; Chr(34)
    Next

    Dim R, jse

    R = &quot;(function() { return { &quot; &amp; Join(S, &quot;, &quot;) &amp; &quot; }; })()&quot;

    Set jse = CreateObject(&quot;ScriptControl&quot;)
    jse.Language = &quot;JavaScript&quot;
    Set ReturnObject = jse.Eval(R)

End Function

Dim K, V, S

K = Array(&quot;proto&quot;, &quot;host&quot;,     &quot;port&quot;)
V = Array(&quot;http&quot;,  &quot;localhost&quot;, 80)

Set S = ReturnObject(K, V)

WScript.Echo(S.host)</code></pre></div><p>Автор примера — <strong>Rumata</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Mon, 15 Feb 2010 13:32:38 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=33067#p33067</guid>
		</item>
	</channel>
</rss>
