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
相關用法
- Javascript padStart()用法及代碼示例
- Javascript Float32Array.from()用法及代碼示例
- Javascript Float64Array.from()用法及代碼示例
- Javascript exec()用法及代碼示例
- Javascript Reflect.get()用法及代碼示例
- Javascript hasOwnProperty()用法及代碼示例
- Javascript Reflect.has()用法及代碼示例
- Javascript Sort()用法及代碼示例
- Javascript padEnd()用法及代碼示例
- Javascript Replace()用法及代碼示例
- Javascript Reflect.set()用法及代碼示例
- Javascript compile()用法及代碼示例
- Javascript Int16Array from()用法及代碼示例
- Javascript Uint32Array from()用法及代碼示例
- Javascript Int8Array from()用法及代碼示例
注:本文由純淨天空篩選整理自SHUBHAMSINGH10大神的英文原創作品 JavaScript | handler.defineProperty() Method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。