js 代理封装

在JS中访问一个属性,如果没有定义这个属性,不会报告错误
将对象用代理套一层,当外部访问未定义的属性时报告错误

function __metaObject() {
	let obj = new Object()
    
	//将当前对象转为代理
	//当外部访问未定义的属性时报告错误
	let proxy = new Proxy(obj, {
		get(targetObj, propoty, receiver) {
			if (!targetObj.hasOwnProperty(propoty)) {
				throw new Error('\'' + targetObj + '\'' + ' 未包含属性: ' + '\'' + propoty + '\'')
			}
			return targetObj[propoty]
		}
	})

	//返回代理对象
	return proxy
}



//使用
let obj = new __metaObject()

obj.name = "Tom";
obj.sayHello = function (targetName) {
	console.log("这里是: " + this.name +  ", 你好: " + targetName)
};

obj.sayHello("Jack57")
obj.age


//运行结果
这里是: Tom, 你好: Jack57
Error: '[object Object]' 未包含属性: 'age'

posted @ 2022-10-04 21:41  trykle  阅读(52)  评论(0)    收藏  举报