<p><strong>Ответ: <code>12</code>.</strong></p>
<p dir="auto">Сначала у нас есть пустой объект <code>x</code>, затем мы добавляем другое свойство <code>hi</code> для x с помощью <code>x.__proto__.hi</code>. Обратите внимание, что это эквивалентно <code>Object.prototype.hi = 10</code> и мы добавляем к <code>father</code> объекту <code>Object</code> свойство <code>hi</code>. Это означает, что каждый отдельный объект унаследует это свойство. Свойство <code>hi</code> становится общим. Допустим, теперь мы объявляем новый объект, такой как <code>let y = {}</code>, <code>y</code> теперь имеет свойство, <code>hi</code> унаследованное от <code>father</code> <code>Object</code>. Проще говоря, <code>x.__proto__ === Object.prototype</code> возвращает <code>true</code>.</p>
<p dir="auto">Затем мы перезаписываем свойство <code>hi</code> новым значением 11. В итоге мы получаем 11 + 1 = 12. <code>x</code> имеет одно свойство, и <code>x.hi</code> возвращает 11.</p>
<p dir="auto">Если вы напишете <code>Object.prototype.hi = 11;</code> вместо <code>Object.prototype.hi = ++x.hi;</code> так, как написано в приведенном выше коде, то <code>Object.keys(x)</code> вернет пустой массив, так как <code>Object.keys(object)</code> возвращает только свойства самого объекта, а не унаследованные. Это означает, что конечный результат будет равен 11, а не 12. По какой-то причине код <code>Object.prototype.hi = ++x.hi;</code> создаст свойство для объекта <code>x</code>` сам по себе, а затем `Object.keys(x)` дает нам массив `["hi"]`.</p>
<p dir="auto">Однако, если вы запустите <code>console.log(x.hasOwnProperty("hi"))</code> он всё равно вернёт <code>false</code>. Кстати, если вы намеренно добавите свойство для x, например <code>x.test = "testing"</code>, то <code>console.log(x.hasOwnProperty("test"))</code> вернёт <code>true</code>.</p>
<p><strong>Ответ: <code>12</code>.</strong></p>
<p dir="auto">Сначала у нас есть пустой объект <code>x</code>, затем мы добавляем другое свойство <code>hi</code> для x с помощью <code>x.__proto__.hi</code>. Обратите внимание, что это эквивалентно <code>Object.prototype.hi = 10</code> и мы добавляем к <code>father</code> объекту <code>Object</code> свойство <code>hi</code>. Это означает, что каждый отдельный объект унаследует это свойство. Свойство <code>hi</code> становится общим. Допустим, теперь мы объявляем новый объект, такой как <code>let y = {}</code>, <code>y</code> теперь имеет свойство, <code>hi</code> унаследованное от <code>father</code> <code>Object</code>. Проще говоря, <code>x.__proto__ === Object.prototype</code> возвращает <code>true</code>.</p>
<p dir="auto">Затем мы перезаписываем свойство <code>hi</code> новым значением 11. В итоге мы получаем 11 + 1 = 12. <code>x</code> имеет одно свойство, и <code>x.hi</code> возвращает 11.</p>
<p dir="auto">Если вы напишете <code>Object.prototype.hi = 11;</code> вместо <code>Object.prototype.hi = ++x.hi;</code> так, как написано в приведенном выше коде, то <code>Object.keys(x)</code> вернет пустой массив, так как <code>Object.keys(object)</code> возвращает только свойства самого объекта, а не унаследованные. Это означает, что конечный результат будет равен 11, а не 12. По какой-то причине код <code>Object.prototype.hi = ++x.hi;</code> создаст свойство для объекта <code>x</code>` сам по себе, а затем `Object.keys(x)` дает нам массив `["hi"]`.</p>
<p dir="auto">Однако, если вы запустите <code>console.log(x.hasOwnProperty("hi"))</code> он всё равно вернёт <code>false</code>. Кстати, если вы намеренно добавите свойство для x, например <code>x.test = "testing"</code>, то <code>console.log(x.hasOwnProperty("test"))</code> вернёт <code>true</code>.</p>
Ниже представлено пояснение.
Ответ: 12
.
Сначала у нас есть пустой объект x
, затем мы добавляем другое свойство hi
для x с помощью x.__proto__.hi
. Обратите внимание, что это эквивалентно Object.prototype.hi = 10
и мы добавляем к father
объекту Object
свойство hi
. Это означает, что каждый отдельный объект унаследует это свойство. Свойство hi
становится общим. Допустим, теперь мы объявляем новый объект, такой как let y = {}
, y
теперь имеет свойство, hi
унаследованное от father
Object
. Проще говоря, x.__proto__ === Object.prototype
возвращает true
.
Затем мы перезаписываем свойство hi
новым значением 11. В итоге мы получаем 11 + 1 = 12. x
имеет одно свойство, и x.hi
возвращает 11.
Если вы напишете Object.prototype.hi = 11;
вместо Object.prototype.hi = ++x.hi;
так, как написано в приведенном выше коде, то Object.keys(x)
вернет пустой массив, так как Object.keys(object)
возвращает только свойства самого объекта, а не унаследованные. Это означает, что конечный результат будет равен 11, а не 12. По какой-то причине код Object.prototype.hi = ++x.hi;
создаст свойство для объекта x
` сам по себе, а затем `Object.keys(x)` дает нам массив `["hi"]`.
Однако, если вы запустите console.log(x.hasOwnProperty("hi"))
он всё равно вернёт false
. Кстати, если вы намеренно добавите свойство для x, например x.test = "testing"
, то console.log(x.hasOwnProperty("test"))
вернёт true
.