2012-03-13 1 views
0

자바 스크립트를 사용하고 있습니다. 인스턴스 변수 "this.variable"을 선언하면 함수가 객체를 반환 할 때까지 작동합니다. 문자열의 반환, 번호가 영향을 미치지 않습니다. 객체를 반환하는 경우 인스턴스 변수는 더 이상 작동하지 않으며 "정의되지 않음"이됩니다. 도와 주실 수 있으신가요! 기능의 범위에자바 스크립트 : 함수 - 객체를 반환 this.variable을 무효화합니다.

function Funct() { 
    this.varfunc = "this ist a instance"; 
    return false; 
} 

var f = new Funct(); 
console.log(f.varfunc); 

function FunctReturnobj() { 
    this.varfunc = "this ist a instance + return an object"; 
    return {}; 
} 

var fr = new FunctReturnobj(); 
console.log(fr.varfunc) 

답변

0

new 연산자는 새 객체를 만들고 그 위에 함수를 적용합니다. this은 함수 범위에서 해당 객체를 참조합니다.

그러나 함수가 new없이 호출되거나 return 문을 포함하면 함수는 "생성자"로 실행되지 않습니다. this은 실행 컨텍스트 (일반적으로 window 개체)를 가리 킵니다.

+0

덕분에, 내 솔루션! return 문을 사용하여 함수를 호출하면 "생성자"로 실행되지 않습니다. – user1267459

0

잘못된 생성자를 사용하고 있습니다. 생성자는 아무 것도 반환하지 않아야합니다. 당신은 "클래스"/ 객체 메소드를 선언 할 prototype 속성을 사용하거나 이미처럼 당신은 생성자를 설정할 수 있습니다 당신의 방법을 선언 할 수 있습니다

function Constructor(value) { 
    this.variable = value; 
} 

var obj = new Constructor('test'); 
obj.variable; // -> Returns 'test'; 

같은 방법은 객체 :

function Constructor(value) { 
    this.variable = value; 

    this.say = function(something) { 
    return "I say: " + something; 
    }; 
} 

또는 프로토 타입 방법 : 당신은 아마 점 :

를 얻을

function Constructor(value) { 
    this.variable = value; 
} 

Constructor.prototype.say = function(something) { 
    return "I say: " + something; 
}; 
과정이 일반적이고 좀 나쁜 예

하지만,

+0

시간과 예제에 감사드립니다! – user1267459