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