私はオブジェクトにObject.assign
が呼び出されているかどうかをチェックしようとしています。これはどうすればいいですか?私のコードは次のようになります:JSの組み込みメソッドが呼び出されているかどうかを確認する
if (Object.assign) {... }
私はオブジェクトにObject.assign
が呼び出されているかどうかをチェックしようとしています。これはどうすればいいですか?私のコードは次のようになります:JSの組み込みメソッドが呼び出されているかどうかを確認する
if (Object.assign) {... }
Object.assignはプロパティをオブジェクトにコピーします。プロパティが設定されているかどうかを調べるには、Proxyを使用します。あなたのオブジェクト上でのみObject.assign
が動作しないようにすることはできません。次のいずれかが可能です。
Object.assign
ので、それが設定されていないプロパティ(悪い考え)(あなたが望むものに多分近い)あなたのobectlet 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});
オブジェクト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}));
既存の値だけをチェックする関数/メソッドをインターセプトしたい場合は、代わりにどのようにしますか? –
@EvenAndréStensbergあなたの質問にはより多くのコードが必要です。あなたはあまりにもオープンな質問をしており、率直には意味がありません。あなたが働きたいコードを正確に示す質問をしてください。 –
ちょうど異なる角度からそれを取得しようとしています。私がReflect.ownKeysをしたら、私はそれが呼び出されるのをどうやって止めるのだろうか? –
'Object.assign'は呼び出されていない関数なので真になります。 –
プロパティがオブジェクト上で変更されているかどうかを調べるには、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxyを使用し、その 'set'操作をトラップする必要があります –
あなたのコードは、メソッドが存在するかどうかをチェックします*(または少なくともプロパティに真理値がある場合)*。あなたが* "...が私のオブジェクトに呼び出されました" *とはどういう意味なのか分かりません。 –