Definition versus assignment
<p><strong>Definition.</strong> To define a property, one uses a function such as </p>

<blockquote>
  <p>Object.defineProperty(obj, propName, propDesc)</p>
</blockquote>

<p>The primary purpose of this function is to add an own (direct) property to obj, whose attributes (writable etc., see below) are as specified by propDesc. The secondary purpose is to change the attributes of a property, including its value. </p>

<p><strong>Assignment.</strong> To assign to a property, one uses an expression such as </p>

<pre><code>obj.prop = value
</code></pre>

<p>The primary purpose of such an expression is to change the value. Before performing that change, JavaScript consults the prototype chain [1] of obj: If there is a setter somewhere in obj or in one of its prototypes then the assignment is an invocation of that setter. Assignment has the side effect of creating a property if it doesn’t exist, yet – as an own property of obj, with default attributes. </p>

<p>But what are the difference and consequences of these two method?</p>
