JS ООП вложенные функции - PullRequest
2 голосов
/ 28 октября 2011

Хорошо, это может быть глупым вопросом, так как я новичок в ООП.

Я пытаюсь создать что-то из библиотеки объектов JS, и мне было интересно, смогу ли я сделать это, используя вложенные функции ??

var object = new function() {

    this.action1 = function () {
        this.dostuff1 = function () {
             return "dostuff1";
        };

     this.dostuff2 = function () {
          return "dostuff2";
     };                   
};

У меня проблемы с доступом к функциям третьего уровня. Можно ли так гнездиться?

this.action2 = function () {
    return "action2";
}; 

alert(object.action1.dostuff2());

Ответы [ 2 ]

3 голосов
/ 28 октября 2011

Хотя ответ Эберлина совершенно верен, я бы предложил вам создать вложенный объект, который, в свою очередь, снова предоставляет функции, а не вложенные функции. В противном случае это может стать кошмаром ремонтопригодности.

По сути, вы можете создать

var Child = function(){
   //constructor
};

Child.prototype.doStuff2 = function(){
  return "dostuff2";
};

var Root = function(obj){
   //constructor
   this.child = obj;
};

Root.prototype.action1 = function(){
   return "doStuff1";
};

//usage
var myRoot = new Root(new Child());
myRoot.action1();
myRoot.child.action2();

Вот живой пример: http://jsbin.com/ijotup/edit#javascript,live

2 голосов
/ 28 октября 2011

Ниже приведена некоторая очистка кода:

var o = (new function () {          // changed 'object' to 'o'
  this.action1 = (function () {     // added parentheses, not required.
    this.dostuff1 = (function () {  // does not return anything.
      return "dostuff1";            // and is also not the proper way to organize
    });                             // ** look at the javascript prototype
    return this;                    // now it does
  });                               // missing closing bracket

  this.dostuff2 = (function () {
    return "dostuff2";
  });                   
});

alert(o.action1().dostuff2());      // action1 is a function, not a variable.

Надеюсь, это поможет.Кроме того, вот краткое руководство по по прототипу javascript .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...