2017-05-22 2 views
0

배열로 특성을 가진 개체를 만든 경우 해당 개체에 인스턴스를 만든 후 하드 코드 된 명령이 다르게 작동하도록 메서드를 작성할 수 있습니까? 예를 들어특정 Javascript 명령을 무시할 수 있습니까?

, 나는 생성자 정의 된 경우 :

function Bunny(){ 
     this.arr = [1,2,3]; 
     this.doSomething = function(){ 
     // do something here 
     } 
} 

을하고 새로운 인스턴스 생성 :

fluffy = new Bunny(); 

"this.doSomething"뭔가를 쓸 수 있을까를 할 때 있도록 다음과 같은 사전 정의 된 명령을 수행합니다.

fluffy.arr[0]=7; 

결과 조치 (추가로 또는 배열의 0 번째 항목을 1에서 7로 변경하는 대신) "Happy Easter!"라는 경고가 나타납니다.

+0

[관련 질문 SO (https://stackoverflow.com/questions/1759987/listening-for-variable-changes-in-javascript-or-jquery) –

+2

관련 질문에 대한 답변은 이제 이것을 수행하는 올바른 방법 인'Proxy'에 대해서는 거의 언급하지 않았습니다. – Alnitak

+0

@Alnitak은 게터와 세터에게 희망이 없습니까? –

답변

2

어느 정도 할 수 있습니다. 입력 : Proxies.

프록시는 개체 주위의 래퍼 역할을하며 해당 개체 속성의 특정 이벤트를 가로 채게합니다. @LincolnBergeson

let arr = [1, 2, 3]; 
 

 
// Wrap the array in a proxy 
 
arr = new Proxy(arr, { 
 
    get(target, name) { 
 
    // Whenever the user accesses the ith element 
 
    // alert, 'Happy Easter! i' 
 
    alert(`Happy Easter! ${name}`); 
 
    
 
    // Return the actual value 
 
    return target[name]; 
 
    }, 
 
    
 
    // You can also target setters 
 
    set(target, name, value) { 
 
    // Whenever the user sets the ith element 
 
    // alert, 'Merry Christmas! i' 
 
    alert(`Merry Christmas! ${name}`); 
 
    
 
    target[name] = value; 
 
    } 
 
}); 
 

 
// Can still set values since a setter wasn't set 
 
arr[0] = 7; 
 
console.log(arr[0]);

+0

좋아요! 감사! 사용자가 i 번째 요소에 액세스 할 때 ('Happy Easter!'+ i) 경고 할 때 작업을 수행 할 수 있습니까? – bloomers

+0

@bloomers 절대적으로! 방금 내가 할 수있는 방법을 보여주는 답변을 업데이트했습니다. –

+1

환상적! 정말 고마워! – bloomers

관련 문제