我試圖檢查Object.assign
是否在我的對象上調用,如果這是虛假的,我會在對象上做進一步的工作。我該怎麼做呢?我的代碼如下所示:檢查JS中的內置方法是否被調用
if (Object.assign) {... }
我試圖檢查Object.assign
是否在我的對象上調用,如果這是虛假的,我會在對象上做進一步的工作。我該怎麼做呢?我的代碼如下所示:檢查JS中的內置方法是否被調用
if (Object.assign) {... }
Object.assign只是將屬性複製到對象。要確定是否正在設置房產,您可以使用Proxy。你不能阻止Object.assign
只能在你的對象上工作。您可以:
Object.assign
所以它不設置屬性(壞主意)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ŧ Ø被稱爲對象
這裏上是一個黑客我真的不建議
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)'將始終評估爲true,因爲'Object.assign'是一個沒有被調用的函數。 –
要了解某個對象上的屬性是否已被修改,您應該使用https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy並捕獲其「set」操作 –
您的代碼檢查方法是否存在*(或者至少如果該屬性具有真值)*。不知道你的意思是「...在我的對象上調用」*。 –