code: function FirebaseArray(ref) {
          if( !(this instanceof FirebaseArray) ) {
            return new FirebaseArray(ref);
          }
          var self = this;
          this._observers = [];
          this.$list = [];
          this._ref = ref;
          this._sync = new ArraySyncManager(this);
  
          $firebaseUtils.assertValidRef(ref, 'Must pass a valid Firebase reference ' +
          'to $firebaseArray (not a string or URL)');
  
          // indexCache is a weak hashmap (a lazy list) of keys to array indices,
          // items are not guaranteed to stay up to date in this list (since the data
          // array can be manually edited without calling the $ methods) and it should
          // always be used with skepticism regarding whether it is accurate
          // (see $indexFor() below for proper usage)
          this._indexCache = {};
  
          // Array.isArray will not work on objects which extend the Array class.
          // So instead of extending the Array class, we just return an actual array.
          // However, it's still possible to extend FirebaseArray and have the public methods
          // appear on the array object. We do this by iterating the prototype and binding
          // any method that is not prefixed with an underscore onto the final array.
          $firebaseUtils.getPublicMethods(self, function(fn, key) {
            self.$list[key] = fn.bind(self);
          });
  
          this._sync.init(this.$list);
  
          // $resolved provides quick access to the current state of the $loaded() promise.
          // This is useful in data-binding when needing to delay the rendering or visibilty
          // of the data until is has been loaded from firebase.
          this.$list.$resolved = false;
          this.$loaded().finally(function() {
            self.$list.$resolved = true;
          });
  
          return this.$list;
        }
docs: This constructor should probably never be called manually. It is used internally by
  <code>$firebase.$asArray()</code>.
  
  @param {Firebase} ref
  @returns {Array}
  @constructor