синтаксис композиции объекта javascript

В следующем коде я хочу иметь возможность вызывать bindClickEvents () следующим образом:

App.Utils.Modal.bindClickEvents();

Однако я не понимаю синтаксиса, необходимого для этого.

Текущий код:

var App = new Object;

App.Modal = {
  bindClickEvents: function() {
    return $('a.alert-modal').click(function(e) {
      return console.log('Alert Callback');
    });
  }
};

$(document).ready(function() {
  return App.Modal.bindClickEvents();
});

person keruilin    schedule 06.01.2012    source источник
comment
Всегда используйте {} вместо new Object   -  person Alex Wayne    schedule 06.01.2012
comment
почему это так, если ты не возражаешь, если я спрошу?   -  person keruilin    schedule 06.01.2012
comment
См. Этот вопрос: stackoverflow.com/questions/251402/   -  person Alex Wayne    schedule 06.01.2012


Ответы (3)


Вы можете сделать это за один раз:

var App = {
  Modal : {
    bindClickEvents : function () {/* ... */}
  }
}

или если вы хотите разбить это на отдельные шаги:

var App = {};
App.Modal = {};
Modal.bindClickEvents = function () {/* ... */};

Кстати, что касается исходного заголовка вопроса, это не цепочка объектов. Это объектная композиция. Цепочка объектов - это возможность вызывать методы объекта несколько раз в одном операторе.

person slebetman    schedule 06.01.2012

Это то, что вы пытаетесь сделать?

var App = {};

App.Utils = {};

App.Utils.Modal = {
  bindClickEvents: function() {
    return $('a.alert-modal').click(function(e) {
      return console.log('Alert Callback');
    });
  }
};

$(document).ready(function() {
  return App.Utils.Modal.bindClickEvents();
});
person Dagg Nabbit    schedule 06.01.2012
comment
Я предполагаю, что OP не на самом деле хотел, чтобы там был объект Utils :-) - person Adam Rackis; 06.01.2012

Предпочитайте синтаксис литерала объекта конструктору объекта; некоторые авторы заходят так далеко, что называют последнее антипаттерном.

Вот самый простой способ настроить App.Utils.Modal.bindClickEvents();

var App = {
      Utils: {
           Modal: {
               bindClickEvents: function() {
                    return $('a.alert-modal').click(function(e) {
                        return console.log('Alert Callback');
                    });
               }
           }
      }
 };

Или вы можете собрать все вместе, шаг за шагом:

var App = {};
App.Utils = {};
App.Utils.Modal = {};
App.Utils.Modal.bindClickEvents = function() {
    return $('a.alert-modal').click(function(e) {
      return console.log('Alert Callback');
    });
};
person Adam Rackis    schedule 06.01.2012