<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=5199</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5199&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript/JScript Реализация полноценных Setters/Getters в IE».]]></description>
		<lastBuildDate>Mon, 06 Dec 2010 00:53:43 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42538#p42538</link>
			<description><![CDATA[<p>А может быть можно как-то профиксить объект VBS уже из JSc? Вообще, как VBS объект классифицируется в JSc? Какой там constructor? Может надо покапаться в COM? Кто-нибудь в этом шарит, извиняюсь, разбирается?</p>]]></description>
			<author><![CDATA[null@example.com (Orme)]]></author>
			<pubDate>Mon, 06 Dec 2010 00:53:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42538#p42538</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42385#p42385</link>
			<description><![CDATA[<p><strong>Orme</strong>, в настоящий момент я вижу развитие языка в положительную сторону в связи с появлением&nbsp; нового движка JScript (Chakra), который будет работать с ActiveX. С другой стороны новая версия не совместима со старыми стандартными интерпретаторами JS, да и вряд ли будет доступна на XP. Поэтому если уж точно выбрали использовать среду WSH, то нужно отвыкнуть от преимуществ движков &quot;конкурентов&quot; (в частности watch, геттеры и сеттеры) или создавать свои ActiveX.</p><div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>как бы вкурсе, но так ли надо при программном изменении отслеживать событие ?</p></blockquote></div><p>Я, например, сторонник использовать методы и свойства объекта (синтаксически), чем одни методы. В больших объемах кода не раз сталкивался с проблемой отслеживания за изменением переменной.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Wed, 01 Dec 2010 22:52:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42385#p42385</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42352#p42352</link>
			<description><![CDATA[<p><strong>JSman</strong>, то что в VBS нельзя расширять экземпляр класса - это печально, по крайней мере для меня. MS в очередной раз &quot;порадовали&quot;. Кстати, g&amp;s замечательно работают на всех движках, кроме trident&#039;а. Не в курсе, когда MS собираются ввести g&amp;s? В IE9 beta не работают, неужели так руки и не дошли?</p>]]></description>
			<author><![CDATA[null@example.com (Orme)]]></author>
			<pubDate>Tue, 30 Nov 2010 23:30:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42352#p42352</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42333#p42333</link>
			<description><![CDATA[<p>как бы вкурсе, но так ли надо при программном изменении отслеживать событие ?</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Tue, 30 Nov 2010 04:22:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42333#p42333</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42331#p42331</link>
			<description><![CDATA[<p>1. VBS не может расширить экземпляр класса. Это я говорю с уверенностью.<br />2. <strong>Orme</strong>, код который вы привели предназначен для Мозиллы. У нее своя реализация JavaScript.<br />3. В рамках JS с компонентом WebBrowser можно делать только сеттеры.</p><p> <strong>smaharbA</strong>, геттер - это функция, которая вызывается когда мы пытаемся получить значение свойства объекта.<br />сеттер — вызывается при установлении свойства.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Tue, 30 Nov 2010 04:19:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42331#p42331</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42330#p42330</link>
			<description><![CDATA[<p>конечно дико извиняюся, но как бы может ничего не понимаю</p><div class="codebox"><pre><code>&lt;html&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var MyObject = {
    myPropertyObjectWithGS: {}
}
Object.prototype.GetGetter=function() {
    for (i in this) {
        if (i != &quot;GetGetter&quot;)
            alert(i+&quot;=&quot;+eval(&quot;this.&quot;+i));
            }
        };
MyObject.myPropertyObjectWithGS.y=1;
MyObject.myPropertyObjectWithGS.x=2;
MyObject.y=&#039;y&#039;;
MyObject.x=&#039;x&#039;;


&lt;/script&gt;
&lt;body onload=&quot;MyObject.myPropertyObjectWithGS.GetGetter();MyObject.GetGetter();&quot;&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Tue, 30 Nov 2010 04:08:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42330#p42330</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42329#p42329</link>
			<description><![CDATA[<p>Почему нет смысла? Ну, допустим, мне нужно сделать wrapper для некоего js кода, который будет писать вообще незнакомый мне чел.<br />Ну например:<br /></p><div class="codebox"><pre><code>var MyObject = {
    myPropertyObjectWithGS: {}
}
MyObject.myPropertyObjectWithGS.__defineGetter__(&#039;x&#039;, function() { /*обрабатываем*/ });
MyObject.myPropertyObjectWithGS.__defineSetter__(&#039;x&#039;, function(val) { /*обрабатываем*/ })
with (MyObject ) {
    //посторонний код (мне неизвестный), в котором кодер делает вот так:
    myPropertyObjectWithGS.x = &#039;y&#039;; //вот это мне просто позарез надо обработать
    var foo = myPropertyObjectWithGS.x; //и такое тоже надо полюбому вообще

    //но ведь кодер имеет полное право сделать и вот так:
    myPropertyObjectWithGS.foo = &#039;bar&#039;;
    //или так:
    myPropertyObjectWithGS.foo = {bar: 42};
    //или даже так:
    myPropertyObjectWithGS.foo = function() { /*...*/ };
    
    //и пусть себе делает, это ж в рамках языка, но вот IE не даст.
}</code></pre></div><p>Товарищи, кто-нибудь может с уверенностью сказать, что в VBS нельзя на лету расширять объекты? Может там какое-нить default property или еще что-нибудь...</p>]]></description>
			<author><![CDATA[null@example.com (Orme)]]></author>
			<pubDate>Tue, 30 Nov 2010 00:10:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42329#p42329</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42328#p42328</link>
			<description><![CDATA[<p>Думаю, что проще ограничиться технологией wsc. Не вижу особого смысла на лету расширять объекты.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Mon, 29 Nov 2010 20:56:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42328#p42328</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42128#p42128</link>
			<description><![CDATA[<div class="quotebox"><cite>jite пишет:</cite><blockquote><p>По поводу возможности создания getters-setters (далее G&amp;S) в JScript из <a href="http://stackoverflow.com/questions/1744131/in-jscript-is-it-possible-to-implement-getters-and-setters-that-look-like-object">обсуждения на StackOverflow</a> ровно (!) год назад. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Вольный перевод высказываний:</p><p>1: Ответ - нет...</p></blockquote></div><p>Насчет JScript все понятно, там нельзя... Но ведь в VBS можно через Get/Set/Let в классах? А в IE у JScript и VBS общее пространство имен, поэтому объекты с s&amp;g, созданные в VBS, можно потом юзать из под JS. Я ж говорю, механизм был бы полноценным, если бы затем можно было бы свободно записывать свойства/методы в объект VBS. Вопрос в том, как это реализовать, и вообще, возможно ли? Если да, то вообще, необходимый VBS код можно было бы прям из JS генерировать, и было бы счастье ) Я мануалов на этот счет вообще не нашел, на msdn/vbs вообще reference какой-то убогий - ни примеров, ни коментов...</p>]]></description>
			<author><![CDATA[null@example.com (Orme)]]></author>
			<pubDate>Tue, 23 Nov 2010 23:01:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42128#p42128</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42124#p42124</link>
			<description><![CDATA[<div class="quotebox"><cite>Orme пишет:</cite><blockquote><p>как на VBS создать объект из класса, чтобы затем в этот объект можно было свободно записывать свойства/методы, не объявленные ранее в классе.</p></blockquote></div><p>Тоже задумывался на этот счет для VBS, привыкнув к простоте добавления в JSc. Но пока не придумал ничего лучше, чем создавать <a href="http://www.script-coding.com/WSH/Dictionary.html">Dictionary</a> и пользоваться его ключами как свойствами, Ну и при необходимости можно засунуть его в класс.</p><p>Впрочем в VBS я новичок, может есть способы лучше?</p>]]></description>
			<author><![CDATA[null@example.com (jite)]]></author>
			<pubDate>Tue, 23 Nov 2010 21:09:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42124#p42124</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42123#p42123</link>
			<description><![CDATA[<p>По поводу возможности создания getters-setters (далее G&amp;S) в JScript из <a href="http://stackoverflow.com/questions/1744131/in-jscript-is-it-possible-to-implement-getters-and-setters-that-look-like-object">обсуждения на StackOverflow</a> ровно (!) год назад. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Вольный перевод высказываний:</p><div class="quotebox"><blockquote><p>1: Ответ - нет. Попытки организовать их эмуляцию в HTML-элементах &lt;=IE7 потерпели неудачу из-за сложности воплощения. Даже IE8 G&amp;S поддерживаются только в DOM объектах и не для JScript объектов... Хорошо б разработчики это воплотили позже.</p><p>2: Не думаю, что это хорошая идея, потому что понять синтаксис будет непросто...</p><p>3: Просто для информации: в IE8 G&amp;S сделаны только для объектов DOM. На вопросы о причинах ограничения разработчики MS сообщили, что фича из разряда &quot;добавлено в последнюю минуту&quot; и до JScript просто не дошли руки. Так что скрестим пальцы, может в IE9 это сделают полностью.</p><p>4: G&amp;S поддерживаются в <a href="http://msdn.microsoft.com/en-us/library/77kz8hy0%28v=VS.90%29.aspx">JScript.NET 8</a></p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (jite)]]></author>
			<pubDate>Tue, 23 Nov 2010 20:47:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42123#p42123</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42120#p42120</link>
			<description><![CDATA[<p>Да, на VBS помоему было бы фундаметнальнее, если бы кто-нибудь рассказал, как на VBS создать объект из класса, чтобы затем в этот объект можно было свободно записывать свойства/методы, не объявленные ранее в классе.<br />Комрады, кто-нибудь знает, это вообще возможно?</p>]]></description>
			<author><![CDATA[null@example.com (Orme)]]></author>
			<pubDate>Tue, 23 Nov 2010 19:56:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42120#p42120</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42091#p42091</link>
			<description><![CDATA[<p>Механим watch при внесении некоторых изменений вполне годится для эмуляции сеттера. Хотя вариант использования VBS мне больше нравится.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Tue, 23 Nov 2010 04:15:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42091#p42091</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42089#p42089</link>
			<description><![CDATA[<p>Спасибо, конечно, но немножко не то. Нужно, чтобы выполнялись некие действия при чтении/записи именно свойства, а не при выполнении метода. Т.е. реализация полноценных setters/getters как на javascript:<br /></p><div class="codebox"><pre><code>&lt;script type=&quot;text/javascript&quot;&gt;
    var obj = {
        get x() {
            //code...
        },
        set x(v) {
            //code...
        }
    };
    //или:
    var obj = {};
    obj.__defineGetter__(&#039;x&#039;, function() { /*code*/ });
    obj.__defineSetter__(&#039;x&#039;, function(v) { /*code*/ });
&lt;/script&gt;</code></pre></div><p>И при чтении/записи свойства <em>x</em> объекта <em>obj</em> будет выполняться <em>code</em>. Это все не работает в JScript/IE, и единственный способ это реализовать - воспользоваться VBScript, как описано мной выше. Но созданный в VBScript объект не позволяет добавлять к себе новые свойства/методы из JScript. Фиксить это надо на VBScript, если это воообще возможно.<br />Нигде не нашел решения, к сожалению. Может кто-нибудь знает?</p>]]></description>
			<author><![CDATA[null@example.com (Orme)]]></author>
			<pubDate>Mon, 22 Nov 2010 22:26:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42089#p42089</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript/JScript Реализация полноценных Setters/Getters в IE]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=42087#p42087</link>
			<description><![CDATA[<p>Хорошо, что этот модуль у себя на почте нашел в отправленных письмах:)</p><div class="codebox"><pre><code>&lt;script&gt;
var Watch = 
{    
    createObject : function ()
    {    
        var    node = document.createElement(&#039;SPAN&#039;);
            node.onpropertychange = Watch.__IE_onchange;

        var    container         = node.style;                
            container._index  = Watch.__watchers.length;
            Watch.__watchers[container._index] = {};
            
            container.watch   = function (propertyName, userFunction) 
            {
                var w = Watch.__watchers;
        
                    w[this._index][propertyName] = userFunction;
                    w[this._index][propertyName].oldValue = this[propertyName];
            }
            
            document.body.appendChild(node);
            return container;
    },

    __watchers : [],

    __IE_onchange : function () 
    {
        var p = event.propertyName.split(&#039;.&#039;)[1], //property
            c = event.srcElement.style, //container
            f = Watch.__watchers[c._index][p]; //function

            if (f &amp;&amp; (f.oldValue!=c[p])) 
                c[p] = f.oldValue = f(p, f.oldValue, c[p]);

    }
};


window.onload= function()
{
    var a=Watch.createObject();
    a.q=0;
    a.watch(&quot;q&quot;, function(q,w,e) {alert([q,w,e]);});
    a.q=1;
}
&lt;/script&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Mon, 22 Nov 2010 21:53:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=42087#p42087</guid>
		</item>
	</channel>
</rss>
