ECMAScript笔记——Proxy

本文介绍了JavaScript的Proxy代理器,它可以在目标对象前设置拦截层,用于访问过滤和改写。内容包括Proxy的基本概念、使用方式及实例,展示了如何通过Proxy代理操作对象属性,包括读取、修改、判断属性存在等操作。
摘要由CSDN通过智能技术生成

代理器(Proxy)概述

  • 代理器可以理解成在目标对象前架设一个“拦截”层,外界对该对象的访问都必须先通过这层拦截,因此提供了一种机制可以对外界的访问进行过滤和改写。
  • Proxy代理的的情况下,目标对象内部的this关键字会指向Proxy代理。
  • 有些原生对象的内部属性只有通过正确的this才能获取,所以Proxy也无法代理这些原生对象的属性。这种情况下可以通过使用bind()解决这个问题。

代理器(Proxy)使用

let p = new Proxy(target, handler);
  • 其中,target 为被代理对象。handler 是一个对象,其声明了代理 target 的一些操作。p 是代理后的对象。
  • 当外界每次对 p 进行操作时,就会执行 handler 对象上的一些方法。

handler 能代理的一些常用的方法如下:

  • get:读取。
  • set:修改。
  • has:判断对象是否有该属性。
  • construct:构造函数。

代理器(Proxy)实例

let Dom = new Proxy({},{
	get(target,attr) {
		let domObj = document.createElement(attr);
		return function(attrs,...children) {
			for(let key in attrs) {
				domObj.setAttribute(key,attrs[key]);
			}

			for(let value of children) {
				if (typeof value == 'string') {
					let textNode = document.createTextNode(value);
					domObj.appendChild(textNode);
				} else {
					domObj.appendChild(value);
				}
			}

			return domObj;
		}
	}
})

let div1 = Dom.div({id:'div1','class':'redBg'},'helloword','你好');
console.log(div1);
document.body.appendChild(div1);

运行结果:
在这里插入图片描述

  • 通过代理器(Proxy)实现了一个创建元素的代理对象Dom。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值