js代理proxy对属性、函数和数组进行处理
使用代理控制属性
const SJ = { name: 'sujiu' };
const proxy = new Proxy(SJ, {
get(obj, property) {
return obj[property];
},
set(obj, property, value) {
obj[property] = value;
return true;
}
})
proxy.name = 'SJ';
console.log(proxy.name);
console.log(proxy);
使用代理控制函数
// 随意写的阶乘函数(举例子)
function factorial(num) {
return num == 1 ? 1 : num * factorial(num - 1);
}
let proxy = new Proxy(factorial, {
apply(func, obj, args) {
// 进行时间统计
console.time("factorial");
func.apply(this, args);
console.timeEnd("factorial");
}
});
proxy.apply({}, [10000]);
用代理对数组进行处理
lessons = [
{
title: '高等数学1-10单元详细解析'
},
{
title: '高等元素论-草雷反应'
}
]
let proxy = new Proxy(lessons, {
get(array, key) {
const title = array[key].title;
// 设置超过4个字符修改title
const overLength = 4;
// 超过的部分转为三个点省略号
array[key].title = title.length > overLength ? title.substr(0, overLength) + ".".repeat(3) : title;
return array[key];
}
})
console.log(proxy[0]);