<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JS: проверка наличия свойств у встроенного объекта Object]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=9559</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9559&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JS: проверка наличия свойств у встроенного объекта Object».]]></description>
		<lastBuildDate>Sat, 10 May 2014 07:46:23 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JS: проверка наличия свойств у встроенного объекта Object]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82832#p82832</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Свойство constructor функции Object унаследовано из прототипа. А hasOwnProperty не показывает свойства из прототипа и цепочки прототипов. <br />Почитайте приведенные ссылки.</p></blockquote></div><p>Что является прототипом для Object()?! Глобальный объект?! Не могу никак понять... почему так происходит...<br />Если&nbsp; hasOwnProperty показывает св-ва/методы, опред. в самом объекте а не в прототипе/цепочки прототипов, то в таком объекте как Array определены методы, к примеру: shift, pop, splice, свойство length и т.п. Это же для самого Array определено, или для его непонятного прототипа? Пример показывает, что для самого Array эти методы не определены, т.к.<br /></p><div class="codebox"><pre><code>var propname = [&#039;shift&#039;, &#039;pop&#039;, &#039;splice&#039;, &#039;length&#039;, &#039;join&#039;];    
var str = &quot;&quot;;                        
for (i=0; i&lt;propname.length; i++)
    {
    if(Array.hasOwnProperty(propname[i]) == true)
        {
        str += &quot;св-во с именем: &quot; + propname[i] + &quot; определено для объекта Array\n&quot;;
        }
    else
        {
        str += &quot;св-во с именем: &quot; + propname[i] + &quot; НЕ определено для объекта Array\n&quot;;
        }
    }
WScript.Echo(str);  - покажет, что кроме length ничего не присутствует</code></pre></div><p>Однако, если заменить строку на </p><div class="codebox"><pre><code>Array.prototype.hasOwnProperty(propname[i]) == true</code></pre></div><p>,<br />то все св-ва как бы &quot;обнаруживаются&quot;. Что такое прототип объекта Array? Почему все св-ва, как в примерах выше определены для него (прототипа)?<br />Думал может на реальном экземпляре объекта типа Array будет иначе выглятеть... брал вместо встроенного Array экземпляр: </p><div class="codebox"><pre><code>myArr = new Array();</code></pre></div><p> -&nbsp; &quot;те же яйца&quot;...</p>]]></description>
			<author><![CDATA[null@example.com (im2002)]]></author>
			<pubDate>Sat, 10 May 2014 07:46:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82832#p82832</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: проверка наличия свойств у встроенного объекта Object]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82673#p82673</link>
			<description><![CDATA[<p>Ага! Вон в чем дело. Ваш пример весьма запутанный, и я обратил внимание на очевидные моменты в Вашем вопросе. </p><p>Все очень просто<br /></p><div class="codebox"><pre><code>
Object.hasOwnProperty(&#039;constructor&#039;) == false
Object.hasOwnProperty(&#039;prototype&#039;) == true
</code></pre></div><p>Свойство constructor функции Object унаследовано из прототипа. А hasOwnProperty не показывает свойства из прототипа и цепочки прототипов. А цикл for-in не перебирает свойства у которых сброшен атрибут enumerable. </p><p>Почитайте приведенные ссылки.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 05 May 2014 12:38:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82673#p82673</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: проверка наличия свойств у встроенного объекта Object]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82659#p82659</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Ваш пример в начале темы некорректен. constructor и property это свойства объектов. В Вашем примере &quot;constructor&quot; и &quot;property&quot; это обычные строковые константы, являющиеся элементами объекта-массива. Способ доступа к ним разный.</p></blockquote></div><p>С этим согласиться не могу.</p><div class="codebox"><pre><code>if(Object.hasOwnProperty(&quot;constructor&quot;) == true)
            {
            WScript.Echo(&quot;объект: \&quot;Object\&quot; имеет св-во с именем: \&quot;constructor\&quot;&quot;);
            }
        else
            {
              WScript.Echo(&quot;объект: \&quot;Object\&quot;  НЕ имеет св-во с именем: \&quot;constructor\&quot;&quot;);
            }
if(Object.hasOwnProperty(&quot;prototype&quot;) == true)
            {
            WScript.Echo(&quot;объект: \&quot;Object\&quot; имеет св-во с именем: \&quot;prototype\&quot;&quot;);
            }
        else
            {
              WScript.Echo(&quot;объект: \&quot;Object\&quot;  НЕ имеет св-во с именем: \&quot;prototype\&quot;&quot;);
            } </code></pre></div><p>Это даёт такой же результат... увы...<br />Если переписать:<br /></p><div class="codebox"><pre><code>if(Object.prototype.hasOwnProperty(&quot;constructor&quot;) == true)
            {
            WScript.Echo(&quot;объект: \&quot;Object\&quot; имеет св-во с именем: \&quot;constructor\&quot;&quot;);
            }
        else
            {
              WScript.Echo(&quot;объект: \&quot;Object\&quot;  НЕ имеет св-во с именем: \&quot;constructor\&quot;&quot;);
            }</code></pre></div><p>тогда свойство присутствует... вот в этом и пытался разобраться...</p>]]></description>
			<author><![CDATA[null@example.com (im2002)]]></author>
			<pubDate>Sun, 04 May 2014 17:43:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82659#p82659</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: проверка наличия свойств у встроенного объекта Object]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82584#p82584</link>
			<description><![CDATA[<p>Встроенные свойства объектов имеют атрибут enumerable = false, то есть эти свойства не будет отображаться при переборе переборе в циклах for-in. Это справедлино для свойств constructor и prototype. <br /><a href="http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.3.1">http://www.ecma-international.org/ecma- … c-15.2.3.1</a></p><p>hasOwnProperty ищет свойство данного объекта, игнорируя цепочку вызовов. <br /><a href="http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.4.5">http://www.ecma-international.org/ecma- … c-15.2.4.5</a></p><p>Ваш пример в начале темы некорректен. constructor и property это свойства объектов. В Вашем примере &quot;constructor&quot; и &quot;property&quot; это обычные строковые константы, являющиеся элементами объекта-массива. Способ доступа к ним разный.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 03 May 2014 06:47:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82584#p82584</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: проверка наличия свойств у встроенного объекта Object]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82558#p82558</link>
			<description><![CDATA[<div class="quotebox"><cite>im2002 пишет:</cite><blockquote><p>Результат даёт что св-ва с именем constructor у данного объекта нет?! Почему?</p></blockquote></div><p>Свойства prototype и constructor являются фактически зарезервированными именами, синтаксическое определение которых соответствует свойству объекта, однако позволяющие выполнять смену поведения заданных объектов на основании манипуляции с элементами первого рода<br />Фактически более подробное описание предоставлено здесь <a href="http://msdn.microsoft.com/en-us/library/0cyeksx4(v=vs.90).aspx">http://msdn.microsoft.com/en-us/library … s.90).aspx</a>, при этом в левой колонке Properties осуществляется включение некоторых аналогичных технических свойств</p><div class="quotebox"><cite>im2002 пишет:</cite><blockquote><p>Метод hasOwnProperty() должен проверять только наличие свойств или методов тоже?</p></blockquote></div><p>Свойство не включает формального отличия от метода, поскольку в общем случае не имеет значения, какого вида ссылочный объект записан в ассоциированное свойство, в том числе и функциональный<br />Тем не менее имеет существенное значение, каким образом было создано определенное свойство объекта, и в зависимости от аттбирутов вроде DontEnum<br />Более того, полный ответ с примерами есть а этой странице <a href="http://msdn.microsoft.com/ru-ru/library/328kyd6z(v=vs.94).aspx">http://msdn.microsoft.com/ru-ru/library … s.94).aspx</a></p>]]></description>
			<author><![CDATA[null@example.com (inter-hosting)]]></author>
			<pubDate>Fri, 02 May 2014 13:29:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82558#p82558</guid>
		</item>
		<item>
			<title><![CDATA[JS: проверка наличия свойств у встроенного объекта Object]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82554#p82554</link>
			<description><![CDATA[<p>известно, что у встроенного объекта Object есть 2 свойства: constructor и prototype. Решил проверить их методом hasOwnProperty... </p><div class="codebox"><pre><code>var arr = [&quot;constructor&quot;, &quot;prototype&quot;];
var lst =&quot;&quot;;
for(i=0; i&lt;arr.length; i++)
    {
    if(Object.hasOwnProperty(arr[i]) == true)
            {
            lst += &quot;объект: \&quot;Object\&quot; имеет св-во с именем: &quot; + arr[i] + &quot;\n&quot;;
            }
        else
            {
            lst += &quot;объект: \&quot;Object\&quot;  НЕ имеет св-во с именем: &quot; + arr[i] + &quot;\n&quot;;
            }
    }
WScript.Echo(lst);</code></pre></div><p>результат даёт что св-ва с именем constructor у данного объекта нет?! Почему?<br />метод hasOwnProperty() должен проверять только наличие свойств или методов тоже?</p>]]></description>
			<author><![CDATA[null@example.com (im2002)]]></author>
			<pubDate>Fri, 02 May 2014 10:39:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82554#p82554</guid>
		</item>
	</channel>
</rss>
