Как я вызываю функции объекта в том же объекте?

У меня есть следующий код JavaScript

add_num = {
  f: function(html, num) {
    alert(this.page);
  },

  page : function() {
    return parseInt(this.gup('page'));
  },

  gup : function(name) {
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
    var regex = new RegExp('[\\?&]'+name+'=([^&#]*)');
    var results = regex.exec(window.location.href);
    if(results == null)
      return '';
    else
      return results[1];
  }
}

Но то, когда я называю add_num.f (), что я получаю от предупреждения () является фактическим кодом страницы. Таким образом, это возвращается

function() {
    return parseInt(this.gup('page'));
  }

Я ожидал числовое значение и не любой код вообще.

13
задан Oded 18 April 2010 в 07:35
поделиться

3 ответа

Это потому, что вам нужно вызвать функцию page :

alert(this.page());

вместо

alert(this.page);
9
ответ дан 1 December 2019 в 23:14
поделиться

Причина в том, что литерал не является функцией, поэтому не имеет (видимого) конструктора, поэтому 'this' будет ссылаться на вызывающему объекту.

Конечно, это неверно, если вы используете присвоение этого литерала прототипу функции, но я предполагаю, что здесь это не так.

Кроме того, Дарин прав, вы возвращаете функцию, а не выполняете ее.

Просто укажите объект явно, например add_num.page ().

add_num = {
  f: function(html, num) {
    alert(add_num.page());
  },

  page : function() {
    return parseInt(add_num.gup('page'));
  },

  gup : function(name) {
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
    var regex = new RegExp('[\\?&]'+name+'=([^&#]*)');
    var results = regex.exec(window.location.href);
    if(results == null)
      return '';
    else
      return results[1];
  }
}
6
ответ дан 1 December 2019 в 23:14
поделиться

Вы предупреждаете саму функцию, а не результат его выполнения. Вы должны сделать это:

alert(this.page());
4
ответ дан 1 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: