2016-11-13 2 views
1

저는 Javascript에 비교적 익숙하지 않습니다. 작업중인 게임 유형 프로젝트에 아주 간단한 물리 엔진을 만들려고합니다. 이렇게하기 위해, 내가 원하는 각 객체에 대해 새로운 사본을 만들 수있는 클래스의 JS 상당 클래스로 이해했습니다. 문제는 x 위치와 같은 값을 업데이트 할 수 있고 x 중간 위치 (화면의 x 중심)와 같은 값을 업데이트 할 수 있기를 원합니다. 객체 리터럴과 getter를 사용하면 이것이 가능하다는 것을 알지만, 화면에있는 것을 기반으로 실시간으로 새 객체를 만들 수 있기를 원하며 get을 사용하여이 작업을 수행하는 방법을 알 수 없습니다. 당신은 하나 개의 속성을 변경하고 업데이트 할 다른 속성을 기대하고다른 속성을 기반으로 JS "클래스"의 속성을 업데이트하나요?

var object = function (xPos, yPos, width, height) { 
    this.xPos = xPos; 
    this.yPos = yPos; 
    function getXMid (xP) { return xP + width/2; } 
    this.xMid = getXMid (this.xPos); 
    function getYMid (yP) { return yP + height/2; } 
    this.yMid = getYMid (this.yPos); 
} 

var ball = new object (10, 20, 50, 50); 
ball.xPos = 50; 
console.log (ball.xMid); // want this to output 75 instead of 45 

답변

0

, 불행하게도 그것은 속성 원시 값을 보유 그런 식으로 작동하지 않습니다 여기에 내가 뭘하려고 오전의 일반적인 생각이다. 당신이 값이이 작동하는 것 같다

var object = function(xPos, yPos, width, height) { 
 
    this._xPos = xPos; 
 
    this._yPos = yPos; 
 
    this.recalc = function() { 
 
    \t this.xMid = getXMid(this.xPos); 
 
     this.yMid = getYMid(this.yPos); 
 
    } 
 
    
 
    Object.defineProperty(this, 'xPos', { 
 
     get: function() { 
 
      return this._xPos; 
 
     }, 
 
     set: function(v) { 
 
     \t this._xPos = v; 
 
     \t this.recalc(); 
 
     } 
 
    }); 
 

 
\t Object.defineProperty(this, 'yPos', { 
 
     get: function() { 
 
      return this._yPos; 
 
     }, 
 
     set: function(v) { 
 
     \t this._yPos = v; 
 
     \t this.recalc(); 
 
     } 
 
    }); 
 
    
 
    function getXMid(xP) { return xP + width/2; } 
 
    
 
    function getYMid(yP) { return yP + height/2; } 
 
    
 
    this.recalc(); 
 
} 
 

 
var ball = new object(10, 20, 50, 50); 
 
ball.xPos = 50; 
 
console.log (ball.xMid); // want this to output 75 instead of 45

+0

감사를 설정할 때

당신은 다른 속성을 업데이트 세터와 getter와 기능을 사용할 수 있습니다! 나는 setter가 어떻게 작동하는지에 대해 약간 혼란 스럽다. 사용하는 v 매개 변수의 출처는 어디입니까? –

+0

setter가 얻는 유일한 인수는 설정 값입니다. 그래서'v'는'this.xPos = ***'를 – adeneo

관련 문제