{
	// 1.修饰器是一个函数   2.修改行为  3.修改类的行为
	let readonly=function (target,name,descriptor) {
		descriptor.writable=false
		return descriptor
	}
	class Test{
		@readonly
		time(){
			return ‘2020-05-02‘
		}
	}
let test = new Test()
	test.time=function(){
		console.log(2)
	}
console.log(test.time())
}
{
	let typename=function(target,name,descriptor){
		target.myname=‘hello‘
	}
	@typename
	class Test{
}
console.log(‘类修饰符‘,Test.myname)
	// 第三方库  core-decorators; npm install core-decorators
}
{
	//
	let log=(type)=>{
		return function(target,name,descriptor){
			let src_method=descriptor.value
			descriptor.value=(...arg)=>{
				src_method.apply(target,arg)
				console.log(`log ${type}`)
				// 实际 new img.src 接口
			}
		}
	}
class ad{
@log(‘show‘)
		show(){
			console.info(‘ad is show‘)
		}
		@log(‘click‘)
		click(){
			console.log(‘ad is click‘)
		}
	}
	let ad = new ad()
	ad.show()
	ad.click()
}
原文:https://www.cnblogs.com/laohange/p/12815760.html