<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Тонкости ECMA-262-3. Часть 7.2. ООП: Реализация в ECMAScript.</title>
	<atom:link href="http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/feed/" rel="self" type="application/rss+xml" />
	<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/</link>
	<description>by Dmitry Soshnikov</description>
	<lastBuildDate>Sat, 04 Feb 2012 03:57:06 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Dmitry Soshnikov</title>
		<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#comment-9308</link>
		<dc:creator>Dmitry Soshnikov</dc:creator>
		<pubDate>Tue, 22 Nov 2011 17:27:10 +0000</pubDate>
		<guid isPermaLink="false">http://dmitrysoshnikov.com/?p=62#comment-9308</guid>
		<description>@&lt;b&gt;Alexander Belov&lt;/b&gt;

&lt;blockquote&gt;И вы, похоже, как и я любите Ruby :)&lt;/blockquote&gt;

Точно ;) Да и вообще я люблю языки (Erlang, Python, CoffeeScript, Lua и другие).

&lt;blockquote&gt;Возможно, вместо написания своей, лучше использовать вашу, не изобретать велосипед, — с теорией знаком да и ладно&lt;/blockquote&gt;

Ну, написание своего &quot;велосипеда&quot; в академических целях несомненно повышает скилл -- так что в любом случае будет полезно. Но, если же Вы уже используете какой-то фреймворк в проекте, где реализованы &quot;классы&quot;, то есть смысл сразу их использовать. Хотя, все зависит от ситуации -- может Ваша &quot;обертка&quot; будет намного эффективней или еще что-то.

&lt;blockquote&gt;(Только хотел бы заметить, что у вас меню в правом верхнем углу спозиционировано абсолютно и при этом не помещается в обычный экран браузера на моём 13″ макбуке, поэтому приходится хитрить — менять в Веб-инспекторе позиционирование, либо уменьшать масштаб страницы. Надо, очевидно, что-то сделать с этим.)&lt;/blockquote&gt;

Да, мне уже говорили об этом. Этот блок меню писал не я. Если есть какие-нибудь предложения, как это можно лучше реализовать, пришлите мне на почту, я с удовольствием рассмотрю и встрою.</description>
		<content:encoded><![CDATA[<p>@<b>Alexander Belov</b></p>
<blockquote><p>И вы, похоже, как и я любите Ruby <img src='http://dmitrysoshnikov.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></blockquote>
<p>Точно <img src='http://dmitrysoshnikov.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Да и вообще я люблю языки (Erlang, Python, CoffeeScript, Lua и другие).</p>
<blockquote><p>Возможно, вместо написания своей, лучше использовать вашу, не изобретать велосипед, — с теорией знаком да и ладно</p></blockquote>
<p>Ну, написание своего &#8220;велосипеда&#8221; в академических целях несомненно повышает скилл &#8212; так что в любом случае будет полезно. Но, если же Вы уже используете какой-то фреймворк в проекте, где реализованы &#8220;классы&#8221;, то есть смысл сразу их использовать. Хотя, все зависит от ситуации &#8212; может Ваша &#8220;обертка&#8221; будет намного эффективней или еще что-то.</p>
<blockquote><p>(Только хотел бы заметить, что у вас меню в правом верхнем углу спозиционировано абсолютно и при этом не помещается в обычный экран браузера на моём 13″ макбуке, поэтому приходится хитрить — менять в Веб-инспекторе позиционирование, либо уменьшать масштаб страницы. Надо, очевидно, что-то сделать с этим.)</p></blockquote>
<p>Да, мне уже говорили об этом. Этот блок меню писал не я. Если есть какие-нибудь предложения, как это можно лучше реализовать, пришлите мне на почту, я с удовольствием рассмотрю и встрою.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexander Belov</title>
		<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#comment-9280</link>
		<dc:creator>Alexander Belov</dc:creator>
		<pubDate>Tue, 22 Nov 2011 05:46:14 +0000</pubDate>
		<guid isPermaLink="false">http://dmitrysoshnikov.com/?p=62#comment-9280</guid>
		<description>Вижу множество отличных наработок на любой вкус. И вы, похоже, как и я любите Ruby :). Возможно, вместо написания своей, лучше использовать вашу, не изобретать велосипед, — с теорией знаком да и ладно :). В любом случае, ещё раз огромное спасибо за ваши статьи, продолжайте в том же духе! 

(Только хотел бы заметить, что у вас меню в правом верхнем углу спозиционировано абсолютно и при этом не помещается в обычный экран браузера на моём 13&quot; макбуке, поэтому приходится хитрить — менять в Веб-инспекторе позиционирование, либо уменьшать масштаб страницы. Надо, очевидно, что-то сделать с этим.)</description>
		<content:encoded><![CDATA[<p>Вижу множество отличных наработок на любой вкус. И вы, похоже, как и я любите Ruby <img src='http://dmitrysoshnikov.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Возможно, вместо написания своей, лучше использовать вашу, не изобретать велосипед, — с теорией знаком да и ладно <img src='http://dmitrysoshnikov.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . В любом случае, ещё раз огромное спасибо за ваши статьи, продолжайте в том же духе! </p>
<p>(Только хотел бы заметить, что у вас меню в правом верхнем углу спозиционировано абсолютно и при этом не помещается в обычный экран браузера на моём 13&#8243; макбуке, поэтому приходится хитрить — менять в Веб-инспекторе позиционирование, либо уменьшать масштаб страницы. Надо, очевидно, что-то сделать с этим.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dmitry A. Soshnikov</title>
		<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#comment-9265</link>
		<dc:creator>Dmitry A. Soshnikov</dc:creator>
		<pubDate>Mon, 21 Nov 2011 18:16:21 +0000</pubDate>
		<guid isPermaLink="false">http://dmitrysoshnikov.com/?p=62#comment-9265</guid>
		<description>@&lt;b&gt;Alexander Belov&lt;/b&gt;

Спасибо; приятно видеть программистов, интересующихся глубоким JS.

&lt;blockquote&gt;Во-первых, не очень понятно, когда у создаваемого объекта появляется свойство constructor: в момент присвоения A.prototype = new A()?&lt;/blockquote&gt;

Свойство &lt;code&gt;constructor&lt;/code&gt; у объектов является не родным, а &lt;em&gt;унаследованным&lt;/em&gt;. Это свойство лежит в прототипе:

[js]function A() {}

var a = new A();

console.log(a.constructor); // A[/js]

Но -- отчетливо видно, что это неродное свойство:

[js]
console.log(a.hasOwnProperty(&quot;constructor&quot;)); // false
console.log(a.__proto__.hasOwnProperty(&quot;constructor&quot;)); // true

console.log(A.prototype.hasOwnProperty(&quot;constructor&quot;)); // true

console.log(a.__proto__ === A.prototype); // true[/js]

А в &lt;code&gt;A.prototype&lt;/code&gt; свойство &lt;code&gt;constructor&lt;/code&gt; появляется &lt;a href=&quot;http://dmitrysoshnikov.com/ecmascript/ru-chapter-5-functions/#algoritm-sozdaniya-funktsiy&quot; rel=&quot;nofollow&quot;&gt;при создании&lt;/a&gt; функции. И это есть рекурсивная ссылка функции на себя:

[js]console.log(A.prototype.constructor === A); // true[/js]

&lt;blockquote&gt;Во-вторых, по поводу ООП-обёртки. Можно ли использовать ваш код для написания своей :) ? Какие ещё обёртки вы бы посоветовали, в чём их преимущество?&lt;/blockquote&gt;

Конечно используйте ;) К тому же, это довольно распространенный на сегодня вариант для ES3. В ES5 &lt;a href=&quot;http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/&quot; rel=&quot;nofollow&quot;&gt;появилась&lt;/a&gt; уже стандартная обертка -- &lt;code&gt;Object.create&lt;/code&gt;, которая делает почти то же самое внутри.

Оберток много, реализации есть во многих библиотеках. Наиболее интересны обертки с удобным &lt;code&gt;super&lt;/code&gt;-вызовами, т.е. вызовы методов родительских классов без &quot;хардкода&quot; имен классов. Вот несколько из &lt;a href=&quot;https://gist.github.com/1330574&quot; rel=&quot;nofollow&quot;&gt;моих&lt;/a&gt; &lt;a href=&quot;https://gist.github.com/1366953&quot; rel=&quot;nofollow&quot;&gt;наработок&lt;/a&gt;.</description>
		<content:encoded><![CDATA[<p>@<b>Alexander Belov</b></p>
<p>Спасибо; приятно видеть программистов, интересующихся глубоким JS.</p>
<blockquote><p>Во-первых, не очень понятно, когда у создаваемого объекта появляется свойство constructor: в момент присвоения A.prototype = new A()?</p></blockquote>
<p>Свойство <code>constructor</code> у объектов является не родным, а <em>унаследованным</em>. Это свойство лежит в прототипе:</p>
<pre class="brush: jscript; title: ;">function A() {}

var a = new A();

console.log(a.constructor); // A</pre>
<p>Но &#8212; отчетливо видно, что это неродное свойство:</p>
<pre class="brush: jscript; title: ;">
console.log(a.hasOwnProperty(&quot;constructor&quot;)); // false
console.log(a.__proto__.hasOwnProperty(&quot;constructor&quot;)); // true

console.log(A.prototype.hasOwnProperty(&quot;constructor&quot;)); // true

console.log(a.__proto__ === A.prototype); // true</pre>
<p>А в <code>A.prototype</code> свойство <code>constructor</code> появляется <a href="http://dmitrysoshnikov.com/ecmascript/ru-chapter-5-functions/#algoritm-sozdaniya-funktsiy" rel="nofollow">при создании</a> функции. И это есть рекурсивная ссылка функции на себя:</p>
<pre class="brush: jscript; title: ;">console.log(A.prototype.constructor === A); // true</pre>
<blockquote><p>Во-вторых, по поводу ООП-обёртки. Можно ли использовать ваш код для написания своей <img src='http://dmitrysoshnikov.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ? Какие ещё обёртки вы бы посоветовали, в чём их преимущество?</p></blockquote>
<p>Конечно используйте <img src='http://dmitrysoshnikov.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  К тому же, это довольно распространенный на сегодня вариант для ES3. В ES5 <a href="http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/" rel="nofollow">появилась</a> уже стандартная обертка &#8212; <code>Object.create</code>, которая делает почти то же самое внутри.</p>
<p>Оберток много, реализации есть во многих библиотеках. Наиболее интересны обертки с удобным <code>super</code>-вызовами, т.е. вызовы методов родительских классов без &#8220;хардкода&#8221; имен классов. Вот несколько из <a href="https://gist.github.com/1330574" rel="nofollow">моих</a> <a href="https://gist.github.com/1366953" rel="nofollow">наработок</a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexander Belov</title>
		<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#comment-9258</link>
		<dc:creator>Alexander Belov</dc:creator>
		<pubDate>Mon, 21 Nov 2011 14:45:01 +0000</pubDate>
		<guid isPermaLink="false">http://dmitrysoshnikov.com/?p=62#comment-9258</guid>
		<description>Дмитрий, здравствуйте. Читаю ваши статьи с огромным упоением: наконец-то я нашёл действительно глубокий материал по JavaScript. 

Собственно, у меня к вам пара вопросов по данной статье. Во-первых, не очень понятно, когда у создаваемого объекта появляется свойство constructor: в момент присвоения A.prototype = new A()? Было бы здорово, если бы вы подробнее описали это место. Во-вторых, по поводу ООП-обёртки. Можно ли использовать ваш код для написания своей :)? Какие ещё обёртки вы бы посоветовали, в чём их преимущество?</description>
		<content:encoded><![CDATA[<p>Дмитрий, здравствуйте. Читаю ваши статьи с огромным упоением: наконец-то я нашёл действительно глубокий материал по JavaScript. </p>
<p>Собственно, у меня к вам пара вопросов по данной статье. Во-первых, не очень понятно, когда у создаваемого объекта появляется свойство constructor: в момент присвоения A.prototype = new A()? Было бы здорово, если бы вы подробнее описали это место. Во-вторых, по поводу ООП-обёртки. Можно ли использовать ваш код для написания своей <img src='http://dmitrysoshnikov.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ? Какие ещё обёртки вы бы посоветовали, в чём их преимущество?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Сергей</title>
		<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#comment-7378</link>
		<dc:creator>Сергей</dc:creator>
		<pubDate>Fri, 23 Sep 2011 11:54:19 +0000</pubDate>
		<guid isPermaLink="false">http://dmitrysoshnikov.com/?p=62#comment-7378</guid>
		<description>Да, вы правы опечатка, исходя из примера должны быть 10</description>
		<content:encoded><![CDATA[<p>Да, вы правы опечатка, исходя из примера должны быть 10</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dmitry A. Soshnikov</title>
		<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#comment-7376</link>
		<dc:creator>Dmitry A. Soshnikov</dc:creator>
		<pubDate>Fri, 23 Sep 2011 11:14:45 +0000</pubDate>
		<guid isPermaLink="false">http://dmitrysoshnikov.com/?p=62#comment-7376</guid>
		<description>@&lt;b&gt;Сергей&lt;/b&gt;

&lt;blockquote&gt;Насколько я понимаю преобразуется в:

[js]var x = (typeof x !== &#039;undefined&#039;) ? x : {};[/js]&lt;/blockquote&gt;

(Опечатка с &lt;code&gt;{}&lt;/code&gt;? Дефолтное значение &lt;code&gt;10&lt;/code&gt; у Вас в примере). Здесь используется преобразование &lt;code&gt;ToBoolean&lt;/code&gt;:

[js]var x = (Boolean(x) === true) ? x : 10;[/js]

&lt;blockquote&gt;Несколько запутанная нотация, код несомненно короче, но первая мысль которая приходит на ум, когда ее видишь – это возвращение true/false из x&#124;&#124;10&lt;/blockquote&gt;

Это может быть вызвано привычкой, выработанной изначально в языке с другой семантикой (например, Си). Здесь же, JS возвращает &lt;em&gt;сам&lt;/em&gt; операнд, а не boolean значение всей операции (хоть и использует boolean-преобразование для теста). Такая же семантика, например, в Python.</description>
		<content:encoded><![CDATA[<p>@<b>Сергей</b></p>
<blockquote><p>Насколько я понимаю преобразуется в:</p>
<pre class="brush: jscript; title: ;">var x = (typeof x !== 'undefined') ? x : {};</pre>
</blockquote>
<p>(Опечатка с <code>{}</code>? Дефолтное значение <code>10</code> у Вас в примере). Здесь используется преобразование <code>ToBoolean</code>:</p>
<pre class="brush: jscript; title: ;">var x = (Boolean(x) === true) ? x : 10;</pre>
<blockquote><p>Несколько запутанная нотация, код несомненно короче, но первая мысль которая приходит на ум, когда ее видишь – это возвращение true/false из x||10</p></blockquote>
<p>Это может быть вызвано привычкой, выработанной изначально в языке с другой семантикой (например, Си). Здесь же, JS возвращает <em>сам</em> операнд, а не boolean значение всей операции (хоть и использует boolean-преобразование для теста). Такая же семантика, например, в Python.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Сергей</title>
		<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#comment-7375</link>
		<dc:creator>Сергей</dc:creator>
		<pubDate>Fri, 23 Sep 2011 11:03:43 +0000</pubDate>
		<guid isPermaLink="false">http://dmitrysoshnikov.com/?p=62#comment-7375</guid>
		<description>[js]function foo (x){
var x = x &#124;&#124; 10;
...}[/js]

Насколько я понимаю преобразуется в:

[js]var x = (typeof x !== &#039;undefined&#039;) ? x : {};[/js]

Несколько запутанная нотация, код несомненно короче, но первая мысль которая приходит на ум, когда ее видишь - это возвращение true/false из x&#124;&#124;10.</description>
		<content:encoded><![CDATA[<pre class="brush: jscript; title: ;">function foo (x){
var x = x || 10;
...}</pre>
<p>Насколько я понимаю преобразуется в:</p>
<pre class="brush: jscript; title: ;">var x = (typeof x !== 'undefined') ? x : {};</pre>
<p>Несколько запутанная нотация, код несомненно короче, но первая мысль которая приходит на ум, когда ее видишь &#8211; это возвращение true/false из x||10.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dmitry A. Soshnikov</title>
		<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#comment-7369</link>
		<dc:creator>Dmitry A. Soshnikov</dc:creator>
		<pubDate>Fri, 23 Sep 2011 07:43:34 +0000</pubDate>
		<guid isPermaLink="false">http://dmitrysoshnikov.com/?p=62#comment-7369</guid>
		<description>@&lt;b&gt;Сергей&lt;/b&gt;

Собственно, если речь идет лишь о конструкторе &lt;code&gt;Object&lt;/code&gt;, то &lt;em&gt;инициализатор объекта&lt;/em&gt; (или &lt;em&gt;литеральная нотация объекта&lt;/em&gt;) -- всего лишь &lt;em&gt;синтаксический сахар&lt;/em&gt; для &lt;code&gt;new Object&lt;/code&gt;:

[js]var foo = {x: 10, y: 20};[/js]

то же самое, что:

[js]var foo = new Object;
foo.x = 10;
foo.y = 20;
[/js]

Очевидно, что когда имена свойств и структура объекта заранее известны, удобней использовать инициализатор объекта (хотя, может быть и дело вкуса).

С другой стороны, метод с конструктором позволяет создавать свойства, имена которых определяются в рантайме, т.е. не известны на этапе компиляции:

[js]var foo = new Object;

for (var k = 3; k--;) {
  foo[&quot;slot&quot; + k] = k;
}

console.log(foo); // {slot3: 3, slot2: 2, ...}[/js]

Прототипом в обоих случаях -- и с &lt;code&gt;{}&lt;/code&gt;, и с &lt;code&gt;new Object&lt;/code&gt;, будет &lt;code&gt;Object.prototype&lt;/code&gt;.

Ну и, опять же, как было отмечено в разделе про &lt;a href=&quot;http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#literalnyie-notatsii&quot; rel=&quot;nofollow&quot;&gt;литеральные нотации&lt;/a&gt;, имя &lt;code&gt;Object&lt;/code&gt; можно переопределить, и тогда &lt;code&gt;new Object&lt;/code&gt; будет возвращать другой объект, тогда как &lt;code&gt;{}&lt;/code&gt; продолжит (но не во всех реализациях) создавать нативные объекты.</description>
		<content:encoded><![CDATA[<p>@<b>Сергей</b></p>
<p>Собственно, если речь идет лишь о конструкторе <code>Object</code>, то <em>инициализатор объекта</em> (или <em>литеральная нотация объекта</em>) &#8212; всего лишь <em>синтаксический сахар</em> для <code>new Object</code>:</p>
<pre class="brush: jscript; title: ;">var foo = {x: 10, y: 20};</pre>
<p>то же самое, что:</p>
<pre class="brush: jscript; title: ;">var foo = new Object;
foo.x = 10;
foo.y = 20;
</pre>
<p>Очевидно, что когда имена свойств и структура объекта заранее известны, удобней использовать инициализатор объекта (хотя, может быть и дело вкуса).</p>
<p>С другой стороны, метод с конструктором позволяет создавать свойства, имена которых определяются в рантайме, т.е. не известны на этапе компиляции:</p>
<pre class="brush: jscript; title: ;">var foo = new Object;

for (var k = 3; k--;) {
  foo[&quot;slot&quot; + k] = k;
}

console.log(foo); // {slot3: 3, slot2: 2, ...}</pre>
<p>Прототипом в обоих случаях &#8212; и с <code>{}</code>, и с <code>new Object</code>, будет <code>Object.prototype</code>.</p>
<p>Ну и, опять же, как было отмечено в разделе про <a href="http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#literalnyie-notatsii" rel="nofollow">литеральные нотации</a>, имя <code>Object</code> можно переопределить, и тогда <code>new Object</code> будет возвращать другой объект, тогда как <code>{}</code> продолжит (но не во всех реализациях) создавать нативные объекты.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Сергей</title>
		<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#comment-7354</link>
		<dc:creator>Сергей</dc:creator>
		<pubDate>Wed, 21 Sep 2011 14:22:48 +0000</pubDate>
		<guid isPermaLink="false">http://dmitrysoshnikov.com/?p=62#comment-7354</guid>
		<description>Здравствуйте, Дмитрий ! У меня следующий вопрос. 
Не могли бы вы немного подробнее рассказать о различия между двумя способами создания объектов:

1. Конструктор;
2. Literal notation;

Спасибо!</description>
		<content:encoded><![CDATA[<p>Здравствуйте, Дмитрий ! У меня следующий вопрос.<br />
Не могли бы вы немного подробнее рассказать о различия между двумя способами создания объектов:</p>
<p>1. Конструктор;<br />
2. Literal notation;</p>
<p>Спасибо!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dmitry A. Soshnikov</title>
		<link>http://dmitrysoshnikov.com/ecmascript/ru-chapter-7-2-oop-ecmascript-implementation/comment-page-1/#comment-4745</link>
		<dc:creator>Dmitry A. Soshnikov</dc:creator>
		<pubDate>Sat, 18 Dec 2010 10:21:54 +0000</pubDate>
		<guid isPermaLink="false">http://dmitrysoshnikov.com/?p=62#comment-4745</guid>
		<description>@&lt;b&gt;Фелекс&lt;/b&gt;

&lt;blockquote&gt;но я пока не знаю на сколько он корректен&lt;/blockquote&gt;

Вполне себе корректен. Реализация -- дело десятое. Просто помните, что JS позволяет вызывать метод объекта сразу же, без промежуточных результатов (именно это преимущество цепочек). А что там вернет предыдущий метод -- это уже Ваша реализация.

Т.е. не обязательно даже возвращать объект того же типа. Например, создаем одиночный объект, вызываем его метод foo, который возвращает строку, и сразу же вызываем метод строки:

[js]({foo: function () {
  return &quot;foo&quot;;
}})
  .foo() // &quot;foo&quot;
  .toUpperCase(); // &quot;FOO&quot;[/js]</description>
		<content:encoded><![CDATA[<p>@<b>Фелекс</b></p>
<blockquote><p>но я пока не знаю на сколько он корректен</p></blockquote>
<p>Вполне себе корректен. Реализация &#8212; дело десятое. Просто помните, что JS позволяет вызывать метод объекта сразу же, без промежуточных результатов (именно это преимущество цепочек). А что там вернет предыдущий метод &#8212; это уже Ваша реализация.</p>
<p>Т.е. не обязательно даже возвращать объект того же типа. Например, создаем одиночный объект, вызываем его метод foo, который возвращает строку, и сразу же вызываем метод строки:</p>
<pre class="brush: jscript; title: ;">({foo: function () {
  return &quot;foo&quot;;
}})
  .foo() // &quot;foo&quot;
  .toUpperCase(); // &quot;FOO&quot;</pre>
]]></content:encoded>
	</item>
</channel>
</rss>

