當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Javascript handler.defineProperty()用法及代碼示例

Javascript中的handler.defineProperty()方法用於定義新屬性並直接在對象上修改現有屬性。它是Object.defineProper()的陷阱。

用法:

const p = new Proxy(target, {
  defineProperty:function(target, property, descriptor) {
  }
}); 

參數:此方法接受上述和以下所述的三個參數:



  • Target:此參數保存目標對象。
  • property:此參數是將要檢索其描述的屬性的名稱或符號。
  • descriptor:此參數是正在定義或修改的屬性的描述符。

返回值:此方法返回一個布爾值,該布爾值用於指示屬性是否成功定義。

以下示例說明了JavaScript中的handler.defineProperty()方法:

範例1:

const p = new Proxy({}, { 
  defineProperty:function(target, prop, descriptor) { 
    console.log('Type:' + prop); 
    return true; 
  } 
}); 
  
const desc = { configurable:true, enumerable:true, value:10 }; 
Object.defineProperty(p, 'String', desc); 
  
var xyz = {};   
var proxy = new Proxy(xyz, {   
  defineProperty:function(target, name, propertyDescriptor) {   
console.log('in defineProperty');   
return Object.defineProperty(target, name, propertyDescriptor);   
  }   
});   
Object.defineProperty(proxy, 'bar', {} );  

輸出:

"Type:String"
"in defineProperty"

範例2:

const handler1 = { 
  defineProperty(target, key, descriptor) { 
    invariant(key, 'define'); 
    return true; 
  } 
}; 
  
function invariant(key, action) { 
  if (key[0] === '_') { 
    throw new Error( 
      `Invalid attempt to ${action} private "${key}" property`); 
  } 
} 
  
const monster1 = {}; 
const proxy1 = new Proxy(monster1, handler1); 
  
console.log(proxy1._propt = 'Handler defineProperty');

輸出:

Error:Invalid attempt to define private "_propt" property

支持的瀏覽器:handler.defineProperty()方法支持的瀏覽器如下:

  • 穀歌瀏覽器
  • Firefox
  • Opera
  • Safari
  • Edge



相關用法


注:本文由純淨天空篩選整理自SHUBHAMSINGH10大神的英文原創作品 JavaScript | handler.defineProperty() Method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。