<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JS: непонятное поведение arguments.callee]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9985&amp;type=atom" />
	<updated>2014-09-22T12:41:47Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9985</id>
		<entry>
			<title type="html"><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86648#p86648" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[DanceWoman]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32561</uri>
			</author>
			<updated>2014-09-22T12:41:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86648#p86648</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86621#p86621" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Spy00000 пишет:</cite><blockquote><p>...<br />Если функцию-конструктор возвращает любой объект, то результатом операции new будет переданный ей функцией-конструктором объект, а не тот объект, который она (операция new) создала...</p></blockquote></div><p>Это конечно всё объясняет, но &quot;описание&quot; такого поведения JS в литературе не встречал, а додумать такой простейший пример, какой вы привели для демонстрации, видимо &quot;ума не хватило&quot;. Спасибо, теперь всё понятно!</p>]]></content>
			<author>
				<name><![CDATA[im2002]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28063</uri>
			</author>
			<updated>2014-09-20T17:26:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86621#p86621</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86619#p86619" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Spy00000]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27060</uri>
			</author>
			<updated>2014-09-20T17:14:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86619#p86619</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86616#p86616" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[im2002]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28063</uri>
			</author>
			<updated>2014-09-20T15:49:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86616#p86616</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86613#p86613" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[greg zakharov]]></name>
			</author>
			<updated>2014-09-20T12:31:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86613#p86613</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86611#p86611" />
			<content type="html"><![CDATA[<p>Не знаю. Конструктор, по кр. мере, вызывается. Может, разница в том, что 10 — не объект, поэтому его нельзя спутать с ним. А если вернуть объект, то он и принимается за нужный. Например, объект String даёт тот же эффект.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2014-09-20T10:56:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86611#p86611</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86610#p86610" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[im2002]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28063</uri>
			</author>
			<updated>2014-09-20T10:44:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86610#p86610</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: непонятное поведение arguments.callee]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86609#p86609" />
			<content type="html"><![CDATA[<p>Наверно, потому, что callee — это сам конструктор, а не создаваемый им объект.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2014-09-20T09:12:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86609#p86609</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[JS: непонятное поведение arguments.callee]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86608#p86608" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[im2002]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28063</uri>
			</author>
			<updated>2014-09-20T07:40:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86608#p86608</id>
		</entry>
</feed>
