2016-07-03 3 views
1

Ich versuche zu überprüfen, ob Object.assign an meinem Objekt aufgerufen wird, und wenn das falsch ist, mache ich weitere Arbeiten an dem Objekt. Wie mache ich das? Mein Code sieht folgendermaßen aus:Überprüfen, ob eine eingebaute Methode in JS heißt

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

Das ist nicht Ihr Code sein kann, 'if (Object.assign)' wird immer wirklich empfehlen bewerten zu wahr, weil 'Object.assign' eine Funktion ist, die nicht aufgerufen wird. –

+0

Um herauszufinden, ob eine Eigenschaft für ein Objekt geändert wurde, sollten Sie https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy verwenden und ihre 'set'-Operationen abfangen –

+0

Ihr Code prüft, ob die Methode existiert * (oder zumindest, wenn die Eigenschaft einen truthigen Wert hat) *. Ich bin mir nicht sicher, was du mit * meinen Namen nennst. –

Antwort

0

Object.assign kopiert nur Eigenschaften in ein Objekt. Um herauszufinden, ob eine Eigenschaft festgelegt ist, können Sie eine Proxy verwenden. Sie können nicht verhindern, dass Object.assign nur an Ihrem Objekt funktioniert. Sie können entweder:

  • Aufschalten Object.assign, damit es nicht gesetzt Eigenschaften (schlechte Idee)
  • Prevent jeder von einigen Eigenschaften auf Ihrem Obect Einstellung (vielleicht näher an, was Sie wollen)

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});

ich möchte object.assign t stoppen o für das Objekt aufgerufen wird

Hier ist ein Hack, den ich nicht

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

Wenn ich eine Funktion/Methode abfangen möchte, die nur vorhandene Werte überprüft, wie würde ich das stattdessen tun? –

+1

@ EvenAndreStensberg Ihre Fragen brauchen mehr Code, Sie stellen Fragen, die zu offen sind und ehrlich gesagt keinen Sinn ergeben. Stellen Sie eine Frage, die genau zeigt, welchen Code Sie versuchen zu arbeiten. –

+0

Nur versuchen, es aus verschiedenen Blickwinkeln zu bekommen. Sag, wenn ich Reflect.ownKeys mache, wie würde ich damit aufhören, dass ich angerufen werde? –

Verwandte Themen