У меня есть следующий код 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'));
}
Я ожидал числовое значение и не любой код вообще.
Это потому, что вам нужно вызвать функцию page
:
alert(this.page());
вместо
alert(this.page);
Причина в том, что литерал не является функцией, поэтому не имеет (видимого) конструктора, поэтому '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];
}
}
Вы предупреждаете саму функцию, а не результат его выполнения. Вы должны сделать это:
alert(this.page());