2

我知道这是一个非常愚蠢的问题,但只是不知道为什么这不起作用:

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

哪里不对了?那里一定有一些范围错误。

4

4 回答 4

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);
于 2013-09-06T02:54:21.817 回答
1

您不需要添加关键字this。您name在与函数的其余部分相同的范围内定义。那应该可以解决问题。

于 2013-09-06T02:54:29.677 回答
1

所有的一切都在this搞砸你。具体来说,您将函数定义为this.getPageName,然后尝试调用getPageName您尚未定义的函数 - 您已定义this.getPageName。即使代码确实以这种方式运行,也没有必要。如果console.log函数内部的 s 没有执行,那么函数根本没有运行。

然后,在函数内部,您将this.namename单独时引用。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);
于 2013-09-06T02:59:14.540 回答
1

要么像使用它object

var pagename=new getPageName(page);
console.log(pagename.name);

演示。

或者只是从函数内部的thisall 中删除关键字。this.????=''此外,您可以使用var getPageName = function(){ //... };而不是this.getPageName.

演示。

于 2013-09-06T03:03:09.717 回答