2016-07-03 1 views
1

Object.assign이 내 개체에 대해 호출되는지 확인하려고하고 있는데 위조 된 경우 개체에 대한 추가 작업을 수행합니다. 어떻게해야합니까? 내 코드는 다음과 같습니다.JS에 내장 된 메서드가 호출되었는지 확인

if (Object.assign) {... } 
+1

왜냐하면'Object.assign'은 호출되지 않는 함수이기 때문입니다. –

+0

개체에 대한 속성이 수정되었는지 확인하려면 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy를 사용하고 'set'작업을 트랩해야합니다 –

+0

코드는 메소드가 있는지를 확인합니다 * (또는 적어도 속성에 truey 값이있는 경우) *. * "... 내 물건에 대한 호출"*이라는 의미가 확실하지 않습니다. –

답변

0

Object.assign은 속성을 개체에 복사합니다. 속성이 설정되어 있는지 확인하려면 Proxy을 사용할 수 있습니다. 개체에 대해서만 Object.assign이 작동하지 않도록 할 수는 없습니다. 다음 중 하나를 수행 할 수 있습니다 :

  • 재정 Object.assign 때문에이 설정되지 않는 속성을 (좋은 생각) (당신이 원하는 무엇을 어쩌면 가까운) 당신의 obect

let validator = { 
 
    set: function(obj, prop, value) { 
 
    console.log('an attempt to set values has been made', obj, prop, value); 
 
    // The default behavior to store the value 
 
    obj[prop] = value; 
 
    return true; 
 
    } 
 
}; 
 

 
let person = new Proxy({}, validator); 
 

 
Object.assign(person, {a: 2});
에 대한 몇 가지 속성을 설정에서
  • 방지 모두

    나는 object.assign t 중지하려면 오 오브젝트 여기

    에 호출되는 정말하지 않는 것이 좋습니다 해킹 코드를,`(Object.assign)`항상 평가합니다 경우 수 없습니다

    var objectThatCannotBeObjectAssigned = {a:1}; 
     
    
     
    
     
    var oldAssign = Object.assign; 
     
    Object.assign = function(target) { 
     
        if (target === objectThatCannotBeObjectAssigned) { 
     
        return target; 
     
        } 
     
        return oldAssign.apply(this, arguments); 
     
    } 
     
    
     
    console.log(Object.assign(objectThatCannotBeObjectAssigned, {a: 2})); 
     
    
     
    
     
    console.log(Object.assign({a:1}, {a: 2}));

  • +0

    기존 값만 검사하는 함수/메소드를 가로 채고 싶다면 어떻게 대신 할 수 있습니까? –

    +1

    @ EvenAndréStensberg 질문에 더 많은 코드가 필요하며 끝이 너무 열려 있고 솔직하게 질문을하는 것이 좋습니다. 작업하려는 코드를 정확히 보여주는 질문을하십시오. –

    +0

    그냥 다른 각도에서 그것을 얻으려고. 내가 반성하면 말해라. 키스, 내가 그걸 부르는 것을 어떻게 막을 수 있니? –

    관련 문제