<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JS: непонятное поведение arguments.callee]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=9985</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9985&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JS: непонятное поведение arguments.callee».]]></description>
		<lastBuildDate>Mon, 22 Sep 2014 12:41:47 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86648#p86648</link>
			<description><![CDATA[<div class="quotebox"><cite>im2002 пишет:</cite><blockquote><div class="quotebox"><cite>Spy00000 пишет:</cite><blockquote><p>Если функцию-конструктор возвращает <a href="http://novikov-catering.com.ua/services/21-kompleksnye-obedy-v-ofis.html"><span style="color: #222222">обеды</span></a> любой объект, то результатом операции new будет переданный ей функцией-конструктором объект, а не тот объект, который она (операция new) создала...</p></blockquote></div><p>Это конечно всё объясняет, но &quot;описание&quot; такого поведения JS в литературе не встречал, а додумать такой простейший пример, какой вы привели для демонстрации, видимо &quot;ума не хватило&quot;. Спасибо, теперь всё понятно!</p></blockquote></div><p>А мне ещё нужно немного переварить прочитанное... <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (DanceWoman)]]></author>
			<pubDate>Mon, 22 Sep 2014 12:41:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86648#p86648</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86621#p86621</link>
			<description><![CDATA[<div class="quotebox"><cite>Spy00000 пишет:</cite><blockquote><p>...<br />Если функцию-конструктор возвращает любой объект, то результатом операции new будет переданный ей функцией-конструктором объект, а не тот объект, который она (операция new) создала...</p></blockquote></div><p>Это конечно всё объясняет, но &quot;описание&quot; такого поведения JS в литературе не встречал, а додумать такой простейший пример, какой вы привели для демонстрации, видимо &quot;ума не хватило&quot;. Спасибо, теперь всё понятно!</p>]]></description>
			<author><![CDATA[null@example.com (im2002)]]></author>
			<pubDate>Sat, 20 Sep 2014 17:26:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86621#p86621</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86619#p86619</link>
			<description><![CDATA[<p>Это нормальное поведение операции new, которое описано в стандарте языка.<br />Операция new создаёт новый объект и вызывает функцию-конструктор, привязав её к созданному объекту.<br />Если функцию-конструктор возвращает НЕ объект (а в JavaScript, всё, что не примитивные типы, это объекты, включая функции, массивы, даты и прочее), то результатом операции new будет созданный ею объект.<br />Если функцию-конструктор возвращает любой объект, то результатом операции new будет переданный ей функцией-конструктором объект, а не тот объект, который она (операция new) создала.</p><p>Вот, например, массив:<br /></p><div class="codebox"><pre><code>function $test(a, b)                    
    {
    this.prop1 = a;
    this.prop2 = b;                    
    return [1,2,3,4];
    }
var ObjTst = new $test(1, false);        
var lst = &#039;Тип: &#039; + typeof ObjTst + &#039;\nКонструктор: &#039; + ObjTst.constructor + &#039;\n\n&#039;;

for(i in ObjTst)
    {
    lst += &quot;Имя св-ва: &quot; + i + &quot;\tЗначение св-ва: &quot; + ObjTst[i] + &quot;\n&quot;;
    }
WScript.Echo(lst); </code></pre></div><p>В варианте с &quot;return arguments.callee;&quot; результатом функции-конструктора является объект типа &quot;Функция&quot;, которые есть наследник типа &quot;Объект&quot;, поэтому возвращается ссылка на него, а не на созданный объект.</p>]]></description>
			<author><![CDATA[null@example.com (Spy00000)]]></author>
			<pubDate>Sat, 20 Sep 2014 17:14:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86619#p86619</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86616#p86616</link>
			<description><![CDATA[<div class="quotebox"><cite>greg zakharov пишет:</cite><blockquote><p>arguments - специальное свойство объекта вызова, ссылающееся на объект.... и т. д.</p></blockquote></div><p> <br />Это всё понятно, просто, если бы меня спросили что будет результатом отработки скрипта из 1-ого поста (не проверяя результат, путём запуска js-файла), то я бы сказал, что это будет сообщение из 2-ух строк:</p><p>Имя св-ва: prop1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Значение св-ва: 1<br />Имя св-ва: prop2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Значение св-ва: false</p><p>и был бы не прав... так вот и пытался понять, как JS работает в указанном примере? что в кишках его происходит?</p>]]></description>
			<author><![CDATA[null@example.com (im2002)]]></author>
			<pubDate>Sat, 20 Sep 2014 15:49:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86616#p86616</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86613#p86613</link>
			<description><![CDATA[<p>arguments - специальное свойство объекта вызова, ссылающееся на объект - как ни странно - Arguments, представляющий собой&nbsp; нечто вроде массива, позволяющего извлекать переданные функции значения по номеру (а не по имени).<br />callee - дополнительное свойство Arguments, ссылающееся на исполняемую в данный момент функцию, которое можно использовать, скажем, для рекурсивного вызова неименованных фунций. Например:<br /></p><div class="codebox"><pre><code>var factorial = function(x) {
   if (x &lt; 2) return 1;
   return x * arguments.callee(x - 1);
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (greg zakharov)]]></author>
			<pubDate>Sat, 20 Sep 2014 12:31:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86613#p86613</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86611#p86611</link>
			<description><![CDATA[<p>Не знаю. Конструктор, по кр. мере, вызывается. Может, разница в том, что 10 — не объект, поэтому его нельзя спутать с ним. А если вернуть объект, то он и принимается за нужный. Например, объект String даёт тот же эффект.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sat, 20 Sep 2014 10:56:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86611#p86611</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86610#p86610</link>
			<description><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Наверно, потому, что callee — это сам конструктор, а не создаваемый им объект.</p></blockquote></div><p>понятно, что arguments.callee возвращает ссылку на саму ф-ю, но что мешает при пом. new создать объект с двумя св-ми в примере выше? Смысл как-то непонятен... если в приведённом примере заменить </p><div class="codebox"><pre><code>return arguments.callee;</code></pre></div><p> на </p><div class="codebox"><pre><code>return 10;</code></pre></div><p> к примеру, то ведь объект ObjTst &quot;создаётся&quot;, его св-ва и значения доступны так сказать... Непонятно, почему в случае </p><div class="codebox"><pre><code>return arguments.callee;</code></pre></div><p> объект не создаётся... или что при этом происходит?</p>]]></description>
			<author><![CDATA[null@example.com (im2002)]]></author>
			<pubDate>Sat, 20 Sep 2014 10:44:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86610#p86610</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86609#p86609</link>
			<description><![CDATA[<p>Наверно, потому, что callee — это сам конструктор, а не создаваемый им объект.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sat, 20 Sep 2014 09:12:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86609#p86609</guid>
		</item>
		<item>
			<title><![CDATA[JS: непонятное поведение arguments.callee]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86608#p86608</link>
			<description><![CDATA[<p>Не понятно, почему объект не создаётся ф-ей конструктором&nbsp; $test, если присутствует инструкция return arguments.callee;</p><div class="codebox"><pre><code>function $test(a, b)                    
    {
    this.prop1 = a;
    this.prop2 = b;                    
    return arguments.callee;
    }
var ObjTst = new $test(1, false);        
var lst = &quot;&quot;;
for(i in ObjTst)
    {
    lst += &quot;Имя св-ва: &quot; + i + &quot;\tЗначение св-ва: &quot; + ObjTst[i] + &quot;\n&quot;;
    }
WScript.Echo(lst);    </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (im2002)]]></author>
			<pubDate>Sat, 20 Sep 2014 07:40:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86608#p86608</guid>
		</item>
	</channel>
</rss>
