2013-04-02 3 views
1

자바 스크립트에서 객체에 대해 배우기 위해 테스트 HTML 파일을 작성합니다. 스크립트 태그하나의 함수에서 전역 변수를 선언하고 다른 함수에서 값을 할당하는 방법

을 다음과 같이 코드 제가

<button onclick="initer()"> Click here to test </button> 
<div id="id_div1"></div> 

문제점 AnotherParentFn.prototype.caller가 initer() 함수 임시 변수로부터 호출 될 때이다 여전히 정의되지 이용해 체내에

<script type="text/javascript"> 

    var obj = new ParentFn(); 
    var obj2 = new AnotherParentFn(); 
    var temp; 
    function initer() 
    { 
     temp = obj.Adding(); 
     obj2.caller(); 
    } 
    function ParentFn() 
    { 
     this.a = 10; 
     this.b = 20; 
    } 
    function AnotherParentFn() 
    { 
     this.a = 30; 
     this.b = 50; 
    } 
    AnotherParentFn.prototype.caller = function() 
    { 
     var self = this; 
     temp(); 
    } 
    ParentFn.prototype.Adding = function() 
    { 
     var self = this; 
     document.getElementById("id_div1").innerHTML = " Method Called and Result of a+b is " + (self.a + self.b);   
    } 

</script> 

인 . 코드의 문제점은 무엇입니까 ??

내 작업은 ParentFn.prototype.Adding 함수를 전역 변수에 할당하고 AnotherParentFn.prototype.caller 함수에서 전역 변수를 호출하는 것입니다. 그것을 성취하는 방법?

+0

임시 변수가 이미 전역 변수입니다. –

+0

답을 수락하면 좋을 것입니다. – hifier

답변

0

괄호는 기능을 실행하는 데 사용됩니다. 값을 temp에 할당하면 함수를 호출하고 결과 (undefined)를 temp에 할당합니다. 함수에 대한 참조를 temp에 저장하려면 괄호를 생략하십시오.

temp = obj.Adding; 
0

temp = obj.Adding();을 쓰면 반환 값이 저장됩니다. 함수 포인터가 temp에 없습니다. 이것을 사용하십시오

function initer() 
{ 
    temp = obj.Adding; 
    obj2.caller(); 
} 
0

우선, obj.Adding에 대한 참조가 적절하게 지정되지 않습니다. 그것은 (괄호없이)이 있어야한다 :

function initer() 
{ 
    temp = obj.Adding; 
    obj2.caller(); 
} 

그런 다음, AnotherParentFn.prototype.caller 자체 내에서, 당신은 .call()를 사용하여 명시 적으로 호출 중에 this로 현재 개체를 전달해야합니다

AnotherParentFn.prototype.caller = function() 
{ 
    temp.call(this); 
} 
1

당신은 필요하지 않습니다를 그것을 전역 변수로 저장합니다. 이미 ParentFn.prototype에 저장되었습니다. .call으로 호출하고 원하는 수신자를 전달하면됩니다. 이 같은 AnotherParentFn.prototype.caller을 구현할 수 있습니다 완전히 temp 제거 할 수

AnotherParentFn.prototype.caller = function() 
{ 
    ParentFn.prototype.Adding.call(this); 
} 

이 방법을. 또한 this을 로컬 var self에 할당 할 필요가 없습니다.

관련 문제