2012-07-06 2 views
0

자바 스크립트에서 다른 클래스/인스턴스의 로컬 변수 값을 읽는 방법을 알고 싶었습니다.자바 스크립트에서 메소드의 로컬 변수 사용하기

예 : 나는 클래스의 메소드를

는 :

myClass1.prototype.myMethod0 = function() 

{ 
this._myVar = null; //initialize this._myVar 
} 

myClass1.prototype.myMethod1 = function(list) 
{ 
this._myVar = msg.list; 
} 

myClass1.prototype.myMethod2 = function() 
{ 
//do something 
// and update the list like say: 

list1 = this._myVar; //access the this_myVar. 

} 

말할 내 다른 CALSS에서

,

myClass2.prototype.myMethod = function() 
{ 
//call the class1's method here.. 

myClass1.prototype.myMethod2(); 

} 

myMethod2는이다 콜백 그리고 저는 myClass2에 묶습니다. list1 = this._myVar;가 업데이트 점점되지 않고는 undefined되고있다, myClass1.callback();

하지만 myClass1.prototype.myMethod2();를 호출 할 때 내 문제는, :

그것은 실제로 myMethod2는 다음과 같이 호출되는 것을 의미한다. 나는 똑같은 문제를 해결하지 못하고있다.

문제는 "this._myVar는"myclass1

+0

이전에 method1을 호출하고 this_myVar를 설정 했습니까? –

+1

처음에 this_myVar를 어디에 선언합니까? – Wolfram

답변

0

의 myMethod2에서 "정의되지 않은"무엇을하는 것은 가능하지만 변수입니다없는 방법 당신은 그것을 한 다음 var 키워드없이

  1. 을 변수는 지역 변수가 아니고 전역 변수입니다. 따라서 귀하의 코드는 실제로 변수 this_myVar을 생성했으며이 페이지는 동일한 페이지의 모든 JavaScript 코드에서 공유됩니다.

  2. list1myMethod1()을 호출하지 않은 경우 정의되지 않습니다.

[여기 JavaScript OO 프로그래밍에 대한 소개는] [1]을 참조하십시오.

[편집] 질문이 업데이트되어 변수가 this을 통해 액세스되었습니다. 자동 변수 this은 함수가 "메소드"로 호출 될 때만 지정됩니다.

myClass1.prototype.myMethod2()은 원래 정의를 호출하며 this은 정의되지 않습니다.

는이 같은 코드를 사용해야합니다 : 당신이 그런 식으로 전화를하면

myMethod2의 내부
var inst = new myClass1(); 
inst.myMethod2(); 

변수 thisinst와 같은 값을가집니다.

[EDIT2]는 인스턴스 속성에 액세스하려면, 다음 해야 myClass1의 인스턴스를 통해 전화 myMethod2() - 자바 스크립트 코드를 의미 할 수 있습니다 무엇을 당신의 마음을 읽으려고하지 않습니다.

myClass1의 메소드를 호출 할 때 인스턴스가 있어야합니다. 당신은 다른 세계 방법처럼 myMethod2()를 호출하는 경우

myClass2.prototype.myMethod = function(inst1) { 
    inst1.myMethod2(); 
} 

그러나, this이 필요가 없습니다 : 또는

var myClass2 = function() { 
    this.inst1 = new myClass1(); 
} 

myClass2.prototype.myMethod = function() { 
    this.inst1.myMethod2(); 
} 

, 당신은 방법으로 인스턴스를 전달해야합니다 : 하나 myClass2에서 만들어보십시오 유용한 가치. "접두어가 myClass1.prototype. 인 함수를 호출하면 myClass1의 인스턴스를 찾아서 this에 넣으십시오."라고 말할 수 있습니다. 이 유형의 인스턴스가 15 개일 때 JavaScript가 수행해야하는 작업은 무엇입니까? 무작위로 하나를 선택 하시겠습니까?

+0

하지만 myMethod1()을 호출하고 myMethod2에 대한 호출이 발생했습니다. 그러나 어쨌든, 그것은 가치가 "정의되지 않은"것이되고 있습니다! – Smitha

+0

거기에 다른 해결책이 있습니까? 나는 그것을 "myClass1.prototype.myMethod2();"라고해야 할 것이다. 또한 myMethod2는 콜백입니다. – Smitha

+0

목록을 인수로 사용하여 호출합니다. 'myClass1.prototype.myMethod2 (this.list1);' –

0

다음은 함수 내에서 지역 변수 this_myVar, 그래서 당신이 기능 나올 일단

그 값은 손실됩니다.

그러면 정의되지 않은 값이 표시됩니다.

값을 유지하려면 this_myVar를 클래스 내부의 datamember로 선언해야합니다.

관련 문제