2014-10-05 2 views
0

저는 PortraitOrder()라는 클래스의 생성자가 들어있는 .js 파일을 가지고 있습니다. CalculateCost()라는 메서드가 있습니다. 어떤 이유로 CalculateCost() 메서드를 나중에 호출해도 아무 일도 일어나지 않습니다. 여기 자바 스크립트 메서드 CalculateCost() 나를 위해 어떤 값도 반환하지 않습니다.

  1. 여기
    function PortraitOrder(portrait, copies, size, buyer){ 
    
          this.portrait = portrait; 
          this.copies = copies; 
          this.size = size; 
          this.buyer = buyer; 
    
          function CalculateCost(){ 
    
          this.size = size; 
    
          this.copies = copies; 
    
          var price; 
    
          if(size == "wallet"){ 
    
            price = 10; 
    
          } 
          else if(size == "8x10"){ 
    
            price = 10; 
    
          } 
          else if(size == "4x6"){ 
    
            price = 10; 
    
          } 
          else if(size == "11x14"){ 
    
            price = 30; 
    
          } 
          else{ 
    
            price = 10; 
    
          } 
    
          var cost = price * copies; 
    
          return cost; 
    
          } 
    
        } 
    
  2. 내가 방법을 호출하는 방법입니다 PortraitOrder()와 CalculateCost()이다

     var cost = CalculateCost().toFixed(2); 
    
         document.write("Price of Order: " + cost + "<br/>"); 
    

답변

1

당신은 범위 지정 문제가 될 것으로 보인다 무엇을해야 . CalculateCost()PortraitOrder() 함수 내에서 선언 된 함수이므로 해당 함수 외부에서 액세스 할 수 없습니다. 과 같이, PortraitOrder()의 외부 CalculateCost() 함수를 이동 시도하고 매개 변수로 필요한 변수를 전달 :

function PortraitOrder() { 
    .... 
} 

function CalculateCost(price, copies) { 
    .... 
} 

을 다음, 당신은 CalculateCost()를 호출 할 수 있습니다 :

CalculateCost(price, copies); 

을 당신이 만약 CalculateCost()를 PortraitOrder()의 일부로 사용할 수있게하려면 변수에 대한 참조를 변수에 유지하면됩니다.

업데이트 : 회원님의 의견에 따르면 회원 변수 및 기능이있는 개체를 만들고 싶습니다. 여기에 몇 가지 유용한 링크입니다

+0

불행하게도,이 과제의 일부입니다. 나는 그것을 portraitorder() 안에 넣어야합니다. – Historiun

+1

아, 회원 기능으로 설정하고 싶습니다. 당신은 질문에서 (또는 적어도 당신의 코드에서 분명하지 않다는 것을) 명시하지 않았다. PortraitOrder.prototype.calculateCost = function() {}을 수행 할 수 있습니다. –

+0

오케이. 그렇다면 내 변수 선언이 맞습니까? – Historiun

관련 문제