title: When to use getters/setters and when to safely omit them?
body: <p>According to <a href="http://emberjs.com/guides/object-model/classes-and-instances/" rel="nofollow">http://emberjs.com/guides/object-model/classes-and-instances/</a> it is required to access properties using getters and setters:</p>
  
  <blockquote>
    <p>When accessing the properties of an object, use the get and set accessor methods.</p>
    
    <p>Make sure to use these accessor methods; otherwise, computed properties won't recalculate, observers won't fire, and templates won't update.</p>
  </blockquote>
  
  <p>I understand that it is needed to use setters when changing property to let Ember know about the change so it can update bindings, but what about reading properties?</p>
  
  <p>Example from <a href="http://emberjs.com/guides/object-model/classes-and-instances/" rel="nofollow">http://emberjs.com/guides/object-model/classes-and-instances/</a></p>
  
  <pre><code>App.Person = Ember.Object.extend({
    say: function(thing) {
      var name = this.get('name');
      alert(name + " says: " + thing);
    }
  });
  
  var yehuda = App.Person.create({
    name: "Yehuda Katz"
  });
  
  yehuda.say("Yes");
  </code></pre>
  
  <p>In the example above, <code>this.get('name')</code> is used to access property <code>name</code>, however method <code>say</code> is defined as a property of class <code>App.Person</code> and is accessed directly by dot notation. While there is a distinctive usage difference between method and property, in JavaScript, there's no difference in implementation of both. The example still works if I replace <code>this.get('name')</code> by <code>this.name</code>.</p>
  
  <ol>
  <li>Are there any implementation differences in Ember regarding methods and properties of object?</li>
  <li>Is it always safe to access methods directly?</li>
  <li>Must all properties including computed properties be always accessed by getter? If not, when is it safe to access properties directly?</li>
  </ol>
  
  <p>I definitely want to stick to best practise here, which is to use getter/setter every time, but I'd like to understand the internals of Ember.js :)</p>