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