2016-07-03 8 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

あなたのコードは、メソッドが存在するかどうかをチェックします*(または少なくともプロパティに真理値がある場合)*。あなたが* "...が私のオブジェクトに呼び出されました" *とはどういう意味なのか分かりません。 –

答えて

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トンを停止したい

    オブジェクトoここ

    に呼び出されて、私は本当にお勧めしませんハックあなたのコードを、 `(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

    ちょうど異なる角度からそれを取得しようとしています。私がReflect.ownKeysをしたら、私はそれが呼び出されるのをどうやって止めるのだろうか? –

    関連する問題