<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JS: работа св-ва prototype]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9943&amp;type=atom" />
	<updated>2014-09-02T08:52:02Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9943</id>
		<entry>
			<title type="html"><![CDATA[Re: JS: работа св-ва prototype]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86238#p86238" />
			<content type="html"><![CDATA[<p>Чуть-чуть общих слов, которые описаны на всех ресурсах, посвяженных JavaScript. Это прототипно-ориентированный язык. </p><p>Это значит, что все объекты наследуют свойства родителя через прототип. Изменяя набор свойств и значений в родительском прототипе вы изменяете эти свойства во всех (!!!) наследуемых экземплярах. </p><p>Object - базовый объект для всех объектов. Типы Number, String, Boolean, String, Array и прочие - производные от Object. Поэтому, меняя что-то в его прототипе вы вносите изменения во все (!!!) объекты своего проекта. </p><p>Общепринятое правило: не следует что-то писать в прототип стандартных типов без особой надобности. Некоторые библиотеки это делают, но в этом есть необходимость, например, восполнить отсутствующий функционал. </p><p>Попробуйте следующий пример. Я специально установил новое свойство в прототип Object, чтобы показать как оно появляется во всех переменных наследуемых типов. </p><div class="codebox"><pre><code>

Object.prototype.prop = &#039;Hello, world!&#039;;

function show(v)
{
    WScript.Echo(&#039;====&#039;);
    WScript.Echo(( typeof v ) + &#039; : &#039; + v);
    WScript.Echo(v.prop);
};

var bool = false;
show(bool);

var str = &#039;I am JS string&#039;;
show(str);

var number = 42;
show(number);

var obj1 = {};
show(obj1);

var obj2 = { prop: &#039;Surprise!!!&#039; };
show(obj2);
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2014-09-02T08:52:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86238#p86238</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS: работа св-ва prototype]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86228#p86228" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>im2002 пишет:</cite><blockquote><p>... как происходит, что JS при попытке прочитать св-во prop у числа (переменная e) берёт его из прототипа для Object?</p></blockquote></div><p>Попытаюсь ответить выдержкой из файла справки <strong>Script56.CHM</strong>:<br /></p><div class="quotebox"><blockquote><p><strong>Intrinsic Objects (JScript 5.6)</strong><br />Microsoft JScript provides eleven intrinsic (or &quot;built-in&quot;) objects. They are the Array, Boolean, Date, Function, Global, Math, Number, Object, RegExp, Error, and String objects. Each of the intrinsic objects has associated methods and properties that are described in detail in the language reference. Certain objects are also described in this section. ...</p></blockquote></div><p>Перечислены встроенные объекты языка, среди них есть объект <strong>Number</strong>, и его безымянное свойство содержит элементарное значение <em>Number</em>. В Вашем случае при обращении к его свойству <strong>prop</strong>, оно доступно, как объявленное в прототипе любого объекта. Короче, в JScript любая сущность - есть объект, а, например, для Number это следует из спецификации <a href="http://javascript.ru/ecma/part4#a-4.3.21">ECMA Script, пункт 4.3.21 Объект Number</a>.<br /></p><div class="quotebox"><cite>im2002 пишет:</cite><blockquote><p>... но как оказалось не определено только для переменной h, которая объявлена, но никакого конкретного значения (и сотв. типа) не имеет. ...</p></blockquote></div><p>В том же файле справки в <strong>Data Types (JScript 5.6)</strong> указано, что кроме типа <strong>Object</strong> есть еще и специальный тип <strong>Undefined</strong>, содержащий всегда одно элементарное значение <em>Undefined</em>, естественно, прототип объекта никак на него не влияет.</p>]]></content>
			<author>
				<name><![CDATA[omegastripes]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29228</uri>
			</author>
			<updated>2014-09-01T20:48:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86228#p86228</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[JS: работа св-ва prototype]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86220#p86220" />
			<content type="html"><![CDATA[<p>Помогите разобраться с prototype... никак не пойму как это работает. Написал такой код для проверки:</p><div class="codebox"><pre><code>Object.prototype.prop = &quot;test&quot;;                // опред. некоторое свойство в прототипе Object


var a = new Array(), b = new Enumerator(), c = new Object(), d = new Date(), e = 25, f = &quot;test&quot;, g = true, h;
var myArr = [a, b, c, d, e, f, g, h];

for(k=0; k&lt;myArr.length; k++)
    {
    try
        {
        myArr[k].prop;
        WScript.Echo(&quot;Тип объекта:  &quot; + typeof(myArr[k]) + &quot;\nЗначение св-ва prop:  &quot; + myArr[k].prop);
        }
    catch(err)
        {
        WScript.Echo(&quot;Тип объекта:  &quot; + typeof(myArr[k]) + &quot;\nЗначение св-ва prop НЕ ОПРЕДЕЛЕНО&quot;);
        }
    }</code></pre></div><p>ожидал, что значение св-ва с именем <strong>prop</strong> будет прочитано для объектов, которые имеют тип <strong>Object</strong>,<br />а для объектов типа string, number и прочих оно не будет определено, но как оказалось не определено <br />только для переменной h, которая объявлена, но никакого конкретного значения (и сотв. типа) не имеет.<br />на что ссылается Object.prototype в данном примере? <br />как происходит, что JS при попытке прочитать св-во prop у числа (переменная e) берёт его из прототипа <br />для Object?</p>]]></content>
			<author>
				<name><![CDATA[im2002]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28063</uri>
			</author>
			<updated>2014-09-01T14:40:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86220#p86220</id>
		</entry>
</feed>
