极客江南: 一个对开发技术特别执着的程序员,对移动开发有着独到的见解和深入的研究,有着多年的iOS、Android、HTML5开发经验,对NativeApp、HybridApp、WebApp开发有着独到的见解和深入的研究, 除此之外还精通 JavaScript、AngularJS、 NodeJS 、Ajax、jQuery、Cordova、React Native等多种Web前端技术及Java、PHP等服务端技术。
初学者玩转 TypeScript系列,总计 10 期,本文为第 9 期,点赞、收藏、评论、关注、三连支持!
一期知识点击这里
二期知识点击这里
三期知识点击这里
四期知识点击这里
五期知识点击这里
六期知识点击这里
七期知识点击这里
八期知识点击这里
九期目录
- 1.访问器装饰器
- 2. 属性装饰器
- 3. 参数装饰器
对于初学者来说,学习编程最害怕的就是,难。
那么,Typescript 是不是很难?
首先,我可以肯定地告诉你,你的焦虑是多余的。新手对学习新技术有很强的排斥心理,主要是因为基础不够扎实,然后自信心不够强。
1.访问器装饰器
/*
1.访问器装饰器
- 访问器装饰器声明在一个访问器的声明之前(紧靠着访问器声明)。
访问器装饰器应用于访问器的 属性描述符并且可以用来监视,修改或替换一个访问器的定义
- 访问器装饰器表达式会在运行时当作函数被调用,传入下列3个参数:
+ 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
+ 成员的名字。
+ 成员的属性描述符。
- 注意:
TypeScript不允许同时装饰一个成员的get和set访问器。
取而代之的是,一个成员的所有装饰的必须应用在文档顺序的第一个访问器上
* */
function test(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
// console.log(target);
// console.log(propertyKey);
// console.log(descriptor);
descriptor.set = (value:string)=>{
target.myName = value;
}
descriptor.get = ():string=>{
return target.myName;
}
}
class Person {
private _name:string; // lnj
constructor(name:string){
this._name = name;
}
@test
get name():string{
return this._name;
}
set name(value:string){
this._name = value;
}
}
let p = new Person('lnj');
p.name = 'zs';
console.log(p.name);
console.log(p);
2. 属性装饰器
/*
1.属性装饰器
- 属性装饰器写在一个属性声明之前(紧靠着属性声明)
- 属性装饰器表达式会在运行时当作函数被调用,传入下列2个参数:
+ 对于静态属性来说就是当前的类, 对于实例属性来说就是当前实例
+ 成员的名字。
* */
function test(target:any, proptyName:string) {
console.log(target);
console.log(proptyName);
target[proptyName] = 'lnj';
}
class Person {
// @test
static age:number;
@test
name?:string;
}
let p = new Person();
console.log(p);
3. 参数装饰器
/*
1.参数装饰器
- 参数装饰器写在一个参数声明之前(紧靠着参数声明)。
- 参数装饰器表达式会在运行时当作函数被调用,传入下列3个参数:
+ 对于静态成员来说是当前的类,对于实例成员是当前实例。
+ 参数所在的方法名称。
+ 参数在参数列表中的索引。
* */
/*
其它
属性装饰器,参数装饰器最常见的应用场景就是配合元数据(reflect-metadata),
在不改变原有结构的同时添加一些额外的信息
但是元数据目前也是在提案中, 也还没有纳入正式的标准
所以对于装饰器而言, 我们只需要了解即可,
因为提案中的所有内容将来都是有可能被修改的
因为提案中的所有内容目前都有兼容性问题
* */
function test(target:any, proptyName:string, index:number) {
console.log(target);
console.log(proptyName);
console.log(index);
}
class Person {
say(age:number,@test name:string):void{
}
}
码字不易,在线求个三连支持。
点击下方卡片,关注 回复 书籍 获取保姆级编程电子书