2016-07-03 38 views
1

我試圖檢查Object.assign是否在我的對象上調用,如果這是虛假的,我會在對象上做進一步的工作。我該怎麼做呢?我的代碼如下所示:檢查JS中的內置方法是否被調用

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

這不可能是你的代碼,如果'(Object.assign)'將始終評估爲true,因爲'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ŧ Ø被稱爲對象

這裏上是一個黑客我真的不建議

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,我會如何阻止被叫? –

相關問題