2016-08-05 3 views
0

javascript 객체가 있고 그것에 대한 속성 및 속성 속성을 정의하려고한다고 가정합니다. 즉, 함수를 통해 scaleRatio를 정의하려고합니다. 나는 이것에 대해 어떻게 갈 것인가?함수를 호출하여 JavaScript의 객체 속성 정의하기

나는 내가 다음 Object.defineProperty{canvasData, 'scaleRatio', {enumerable: true, configurable: false};을 정의 함 canvasData.scaleRatio = function(){};

을 할 수있어?

개체에 속성과 특성을 직접 정의 할 수있는 체계적인 방법이 있습니까? 나는 당신이 define : defineProperty 내부에서 function() {}을 할 수 있다는 것을 알고있다. 그러나 나는 여분의 단계를하고 싶지 않다. canvasData.scaleRatio = 'asdf'; 왜 그냥 object.defineProperty 안에 iffe를 사용할 수 없습니까?

업데이트 : 이것에 대한

내 추론은 내가 setupCanvas를 호출하고 CanvasObject을 초기화 할 것입니다 모든 것이 특성이다. 그 중 일부는 함수를 호출하여 속성을 계산해야합니다. 또한 속성 속성을 지정할 수 있기를 원합니다. 체계적인 방법으로 어떻게 이것을 할 수 있습니까?

function setupCanvas(chart){ 
    canvasData = Object.defineProperties({}, { 
     scaleRatio: { 
       value: function(){ 
        console.log('gets here'); 
        var ratio = chart.data.datasets[0].data.reduce(function(prev,curr){ 
        if (prev > curr){ 
         return prev; 
        } 
        return curr; 
       }); 
       return $(canvas).outerWidth()/(scaleRatio + 10);  
      }, 
      enumerable: true, 
      configurable: false, 
      writable: true 
     } 
    }); 
    console.log(canvasData.scaleRatio);, 
} 
+2

여기서 정말로 묻고있는 것을 말할 수 없습니다. getter (값을 함수에서 반환하는 일반 읽기 가능한 속성)를 정의하려고합니다. – jfriend00

+1

"* 왜 그냥 iffe를 object.defineProperty 내부에서 사용할 수 없습니까?"-하지만 할 수 있습니까? – Bergi

+0

@ jfriend00. 혼란을 드려 죄송합니다. 매번 getter가이 계산을 수행하지 않겠습니까? 나는 그것의 속성을 할당 할 때 scaleRatio에 내 함수의 반환 값을 직접 할당하려고합니다. –

답변

1

왜 그냥 object.defineProperty 내부 iffe을 사용할 수 없습니다?

값 대신에 IIFE를 넣을 수 있습니다. 여기에 할 올바른 구문의 예 :

var canvasData = Object.defineProperties({}, { 
 
    scaleRatio: { 
 
     value: (function(){ 
 
      // put whatever logic you want here 
 
      return Math.random(); 
 
     })(), 
 
     writable: true, 
 
     configurable: false, 
 
     enumerable: true 
 
    } 
 
}); 
 

 
console.log(canvasData); 
 
console.log(canvasData.scaleRatio);

당신은 당신의 코드 예제에서 보여 value 함수는 인생 아니다 - 그것은 단지 일반 함수의 당신이 scaleRatio을 만들 것 때문에 정적 속성이 아닌 메서드 인 속성.

+0

고맙습니다. 이것은 내가 필요한 것입니다. 호기심에서 이것은 나쁜 디자인 원리입니까? 다른 함수에서 호출 할 수 없도록 객체 내부에 이러한 메소드를 캡슐화하려고합니다. –

+0

@ YasinYaqoobi - 그 상황에서 IIFE를 사용하는 것은 잘못된 것이 아닙니다. 아무도 그 기능을 수행 할 수 없도록 코드를 캡슐화하고 숨기기위한 목적을 수행합니다. – jfriend00

관련 문제