我知道这是一个非常愚蠢的问题,但不知道为什么这不起作用:
this.getPageName = function(pagenum){
var name;
if(pagenum==1){
this.name='1.page1';
}
else if(pagenum==2){
this.name='2.page2';
}
else if(pagenum==3){
this.name='3.page3';
}
else if(pagenum==4){
this.name='4.page4';
}
console.log("pagenum: " + pagenum);
console.log("tabname: " + name);
return name;
}
var page=3;
var pagename=getPageName(page);
console.log(pagename);
我认为console.log(pagename);
会3.page3
,但输出为undefined
。
有什么不对吗?那里肯定有一些范围错误。
答案 0 :(得分:5)
摆脱函数内部的this.name
。它不是引用函数,而是引用window
对象;也就是说,this.name
不是函数内的变量name
。
this.getPageName = function(pagenum){
var name;
if(pagenum==1){
name='1.page1';
}
else if(pagenum==2){
name='2.page2';
}
else if(pagenum==3){
name='3.page3';
}
else if(pagenum==4){
name='4.page4';
}
console.log("pagenum: " + pagenum);
console.log("tabname: " + name);
return name;
}
var page=3;
var pagename=getPageName(page);
console.log(pagename);
答案 1 :(得分:1)
您无需添加关键字this
。您在与函数其余部分相同的范围内定义了name
。这应该可以解决这个问题。
答案 2 :(得分:1)
所有this
都搞砸了你。具体来说,您将函数定义为this.getPageName
,然后尝试调用尚未定义的函数getPageName
- 您定义了this.getPageName
。即使代码确实以这种方式运行,也没有必要。如果函数内的console.log
未执行,则该函数根本不运行。
然后,在函数内部,当this.name
单独执行时,您将引用name
。从代码中删除this
的每个实例,它应该可以正常工作。
您还可以通过将代码更改为此来加强功能:
getPageName = function(pagenum) {
// Start with '' to make sure it interprets pagenum as a string, not a digit
var name = '' + pagenum + '.page' + pagenum;
console.log("pagenum: " + pagenum);
console.log("tabname: " + name);
return name;
}
var page=3;
var pagename=getPageName(page);
console.log(pagename);
答案 3 :(得分:1)