Причина в том, что литерал не является функцией, поэтому не имеет (видимого) конструктора, поэтому «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];
}
}