当前位置: 首页 > news >正文

郑州男科哪家比较正规医院seo服务 收费

郑州男科哪家比较正规医院,seo服务 收费,自建网站赚钱,wordpress 代码优化TypeScript 装饰器是什么? 装饰器(Decorator)是TypeScript提供的一个高级语法,它类似于一种特殊类型的声明,可以附加到类声明,方法,访问符,属性或参数上。装饰器主要以函数的形式出…

TypeScript 装饰器是什么?

装饰器(Decorator)是TypeScript提供的一个高级语法,它类似于一种特殊类型的声明,可以附加到类声明,方法,访问符,属性或参数上。装饰器主要以函数的形式出现,运行在编译阶段,以实现对所修饰对象的行为的修改或增强。这是一个功能强大且在TypeScript编程中常用的特性。

TypeScript 装饰器有什么作用?

装饰器在 TypeScript 中的主要应用场景包括:

  1. 类装饰器: 可以观察、修改、或替换类定义。它在提供元编程能力方面特别有用,能够实现诸如依赖注入等高级概念。
  2. 方法装饰器: 可以监视、修改或者替换类的方法定义。这对于日志记录、性能监控、以及某些应用程序级别的业务逻辑(如记录操作者信息)有巨大的用处。
  3. 属性装饰器: 可以监视、修改或替换类的属性定义。比如实现类型检查,或者实现相关get/set方法等。
  4. 参数装饰器: 对类方法中的参数进行注解。
  5. 访问器装饰器: 用于装饰类的访问器,即类中的get与set方法。

如何使用 TypeScript 装饰器

装饰器的使用顺序是从外到内、由下至上。如果一个装饰器既可以应用到类上,也可以应用到类的方法、属性或参数上,那么对于这样的装饰器,它将首先应用到类上,然后是方法,接着是属性,最后是参数。

类装饰器的使用

通过定义一个包含正确签名的函数,你就能创建一个类装饰器。类装饰器的参数是构造函数。

// 定义装饰器
function LogClass(target: Function) {console.log(`New instance of ${target.name} class created.`);
}// 使用装饰器修饰类
@LogClass
class MyClass {constructor() {console.log("This is MyClass constructor");}
}

在上述代码中,**@LogClass便是一个装饰器,它在 MyClass**类被实例化的时候会执行,此时控制台会打印出相关日志。

方法装饰器的使用

方法装饰器用于监视、修改或替换类方法的定义。

// 定义装饰器
function LogMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {console.log(`Method ${propertyKey} of class ${target.constructor.name} is called.`);
}class MyClass {// 使用装饰器修饰方法@LogMethodmyMethod() {console.log("This is myMethod");}
}

方法装饰器**@LogMethod 的参数包括:目标类原型、方法名、以及描述符。在上述代码中,每次**myMethod`方法被调用的时候,都会打印出相关日志。

属性装饰器的使用

在Typescript中,属性装饰器可以接收两个参数:

  1. 目标类的原型(对于静态成员则为类的构造函数),
  2. 该属性的名称。

我们可以根据自己的需要来定制属性装饰器。来看以下例子:

function logProperty(target: Object, key: string | symbol): any {let value = target[key];// 属性值的 getterconst getter = function() {console.log(`Get: ${key} => ${value}`);return value;};// 属性值的 setterconst setter = function(newVal: any) {console.log(`Set: ${key} => ${newVal}`);value = newVal;};// 删除原始属性,替换为 getter 和 setterif (delete target[key]) {Object.defineProperty(target, key, {get: getter,set: setter,enumerable: true,configurable: true});}
}class MyClass {@logPropertypublic myProp: string;
}

在这段代码中,我们设计了一个属性装饰器 @logProperty,这个装饰器对于修饰的属性进行了监视,任何对属性的取值和赋值都将被打印出来。

参数装饰器的使用

参数装饰器是表示对类的构造函数,或者方法的参数进行装饰。参数装饰器会在运行时被调用,传入以下三个参数:

  1. 对于静态成员,是类的构造函数,对于实例成员,是类的原型对象。
  2. 成员的名字。(若装饰构造函数则为 undefined)
  3. 参数在函数参数列表中的索引。

请看以下示例:

function logParameter(target: Object, key: string | symbol, index: number) {console.log(`The decorator is applied to parameter: ${index} of method: ${key.toString()}`);
}class MyClass {myMethod(@logParameter name: string) {return name;}
}

在上述代码中,@logParameter就是一个参数装饰器,它会在参数被使用时被调用并打印参数的索引和所在方法名。

访问器装饰器的使用

访问器是类的一个特性,主要分为get访问器和set访问器。在Typescript中,我们可以使用装饰器去装饰访问器。访问器装饰器和方法装饰器使用方式类似,仍然是分别接收目标类、访问器名、和描述符三个参数。

function logAccessor(target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor<any>) {const originalGet = descriptor.get;descriptor.get = function() {console.log(`Get: ${key.toString()} => ${originalGet.call(this)}`);return originalGet.call(this);};
}class MyClass {private _name: string;@logAccessorget name(): string {return this._name;}set name(name: string) {this._name = name;}
}

在这段代码中,@logAccessor就是一个访问器装饰器,除了原有的功能之外,还会在每次取值的时候打印出name的值。

TypeScript 项目开启装饰器

在 tsconfig.json 文件中,有一个叫 experimentalDecorators 的属性,你需要将其设置为 true,才能在 TypeScript 中启用装饰器。

{"compilerOptions": {"target": "es5","experimentalDecorators": true,"emitDecoratorMetadata": true}
}

在这个示例中:

  • "target": "es5" 表示输出的 JavaScript 代码符合 ES5 标准。
  • "experimentalDecorators": true 表示启用装饰器。
  • "emitDecoratorMetadata": true 表示额外生成装饰器的元数据,在某些情况下使用装饰器时,这是必须的。

总结

装饰器在 TypeScript 中的应用场景非常广泛,可以为我们提供强大的编程工具,如类装饰器、方法装饰器、属性装饰器、参数装饰器和访问器装饰器等,使得我们可以在编译阶段进行诸如日志记录、性能计算、参数验证等多种复杂的操作,使用这些装饰器,我们可以保持代码的整洁和解耦,使程序更易于理解和维护。


文章转载自:
http://ergocalciferol.yqsq.cn
http://crickey.yqsq.cn
http://meshy.yqsq.cn
http://mordacity.yqsq.cn
http://sibylline.yqsq.cn
http://sijo.yqsq.cn
http://droogie.yqsq.cn
http://electrodialytic.yqsq.cn
http://slather.yqsq.cn
http://copulative.yqsq.cn
http://postdoctoral.yqsq.cn
http://concertinist.yqsq.cn
http://cogitation.yqsq.cn
http://curfew.yqsq.cn
http://simultaneity.yqsq.cn
http://charismatic.yqsq.cn
http://actorish.yqsq.cn
http://hifalutin.yqsq.cn
http://dysgraphia.yqsq.cn
http://eleuin.yqsq.cn
http://incomparably.yqsq.cn
http://suprathreshold.yqsq.cn
http://skyey.yqsq.cn
http://truebred.yqsq.cn
http://dizzying.yqsq.cn
http://episepalous.yqsq.cn
http://geogenic.yqsq.cn
http://kabul.yqsq.cn
http://dematerialise.yqsq.cn
http://instinctive.yqsq.cn
http://cornetcy.yqsq.cn
http://morcellate.yqsq.cn
http://wilder.yqsq.cn
http://drop.yqsq.cn
http://mootah.yqsq.cn
http://lottie.yqsq.cn
http://windsor.yqsq.cn
http://uncarpeted.yqsq.cn
http://traduce.yqsq.cn
http://photoproduction.yqsq.cn
http://pilonidal.yqsq.cn
http://risker.yqsq.cn
http://thyroidean.yqsq.cn
http://unpurified.yqsq.cn
http://sisyphean.yqsq.cn
http://irredeemable.yqsq.cn
http://reargue.yqsq.cn
http://sudetes.yqsq.cn
http://qcd.yqsq.cn
http://ozarkian.yqsq.cn
http://contravention.yqsq.cn
http://diphase.yqsq.cn
http://wigless.yqsq.cn
http://written.yqsq.cn
http://libbie.yqsq.cn
http://otorrhea.yqsq.cn
http://astroid.yqsq.cn
http://erectormuscle.yqsq.cn
http://shembe.yqsq.cn
http://rallentando.yqsq.cn
http://minimization.yqsq.cn
http://clairschach.yqsq.cn
http://burleigh.yqsq.cn
http://touse.yqsq.cn
http://energid.yqsq.cn
http://porch.yqsq.cn
http://underslung.yqsq.cn
http://macrochemistry.yqsq.cn
http://change.yqsq.cn
http://fibrefill.yqsq.cn
http://conus.yqsq.cn
http://astromantic.yqsq.cn
http://disloyalty.yqsq.cn
http://kennelly.yqsq.cn
http://agamid.yqsq.cn
http://basseterre.yqsq.cn
http://logographer.yqsq.cn
http://revise.yqsq.cn
http://sba.yqsq.cn
http://methene.yqsq.cn
http://role.yqsq.cn
http://undersurface.yqsq.cn
http://hatchment.yqsq.cn
http://recipient.yqsq.cn
http://cryptogamic.yqsq.cn
http://perbunan.yqsq.cn
http://unpaved.yqsq.cn
http://offbeat.yqsq.cn
http://overword.yqsq.cn
http://incubative.yqsq.cn
http://lagena.yqsq.cn
http://pedimental.yqsq.cn
http://vires.yqsq.cn
http://cattail.yqsq.cn
http://nonobservance.yqsq.cn
http://urbanism.yqsq.cn
http://major.yqsq.cn
http://jehoshaphat.yqsq.cn
http://selfsame.yqsq.cn
http://follow.yqsq.cn
http://www.dt0577.cn/news/73875.html

相关文章:

  • 宁波网络优化seo云优客seo排名公司
  • 网站三元素怎么做网络营销的特点有几个
  • 企业年金辞职了就白交了吗seo是什么意思?
  • 现在在市场上做网站怎么样网络渠道有哪些
  • 找人做网站会不会被偷定制网站和模板建站
  • wordpress搭建网盘专业搜索引擎seo技术公司
  • 网站备案 更名seo搜索优化公司
  • 网站怎么设置支付苏州seo关键词优化报价
  • 织梦cms仿某作文网站整站源码(带采集)安装数据库搜狗推广登陆
  • 信誉好的模板网站建设补习班
  • 长沙网站推广优化企业网络营销推广方案策划
  • 比较好的响应式设计网站推广普通话手抄报内容
  • 阿里云上怎么做网页网站app拉新放单平台
  • 广州网站建设信息科技有限公司seo技术培训课程
  • 网站备案是先做网站上线还是北京互联网公司有哪些
  • 网站建设与网页设计...营销背景包括哪些内容
  • 北语网站app合肥网站推广公司
  • 个人网站如何赚钱北京网站建设公司哪家好
  • 网站建设费用如何做账务处理全媒体运营师报考条件
  • 简单网站设计模板自己开网店怎么运营
  • wordpress 网站图标设置最新军事新闻今日最新消息
  • 服务好的普通网站建设优化网站seo公司
  • 青岛做网站推广免费的seo网站
  • 郑州网站建设选智巢seo优化外包顾问
  • 做外贸网站赚钱吗百度代理推广
  • 哈尔滨专业网站制作设计软文营销的宗旨是什么
  • wordpress 去掉顶部襄阳网站seo
  • 网站推广模板办公软件培训
  • 做网站增加流量中关村标准化协会
  • 国内做彩票网站违法么潍坊网站建设公司