簡體   English   中英

為什么下面的javascript函數不起作用?

[英]why below javascript function does not work?

我知道這是一個非常愚蠢的問題,但不知道為什么這不起作用:

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

哪里不對了? 那里肯定有一些范圍錯誤。

擺脫函數內部的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);

您無需添加關鍵字this 您在與函數其余部分相同的范圍內定義了name 那應該解決這個問題。

this都搞砸了你。 具體來說,你定義的功能this.getPageName ,然后試圖調用函數getPageName ,你還沒有定義-您定義this.getPageName 即使代碼確實以這種方式運行,也沒有必要。 如果函數內的console.log沒有執行,那么該函數根本不運行。

然后,在函數內部,只有name才會引用this.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);

要么像object一樣使用它

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

DEMO。

或者只是從函數內部刪除所有this.????=''中的this關鍵字。 此外,您可以使用var getPageName = function(){ //... }; 而不是this.getPageName

DEMO。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM