为什么下面的javascript函数不起作用?

时间:2013-09-06 02:51:56

标签: javascript

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

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 个答案:

答案 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)

使用它像object

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

DEMO.

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

DEMO.