当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。