2013-09-06 6 views
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입니다.

뭐가 잘못 되었나요? 거기에 일부 범위 오류가 있어야합니다.

답변

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

키워드 this을 추가하지 않아도됩니다. name을 나머지 기능과 동일한 범위로 정의했습니다. 그러면 문제가 해결 될 것입니다.

1

모두 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); 
+0

고맙다. – JavaScripter

1

을 어느 쪽 object

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

DEMO.

처럼 사용하거나에서 this 키워드를 제거합니다

당신이 당신의 코드를 변경하여 기능을 강화 수 모두 this.????=''에서 기능. 또한 this.getPageName 대신 var getPageName = function(){ //... };을 사용할 수 있습니다.

DEMO.

관련 문제