Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么从TypeScript方法decorator返回null会阻止其他decorator执行?_Typescript_Javascript Decorators - Fatal编程技术网

为什么从TypeScript方法decorator返回null会阻止其他decorator执行?

为什么从TypeScript方法decorator返回null会阻止其他decorator执行?,typescript,javascript-decorators,Typescript,Javascript Decorators,我正在使用TypeScript中的一个方法装饰器示例,试图了解它们是如何工作的。示例可在此处找到: 本质上,有一个确认修饰符,用于将所选选项添加到数组中。此装饰器在其装饰的方法之前放置两次: const confirmStatement1=`你确定吗?`; const confirmStatement2=`你非常确定吗?`; 冰淇淋类成分{ 浇头=[]; @可确认(confirmStatement1) @可确认(confirmStatement2) 添加浇头(浇头){ 这个。浇头。推(浇头);

我正在使用TypeScript中的一个方法装饰器示例,试图了解它们是如何工作的。示例可在此处找到:

本质上,有一个确认修饰符,用于将所选选项添加到数组中。此装饰器在其装饰的方法之前放置两次:

const confirmStatement1=`你确定吗?`;
const confirmStatement2=`你非常确定吗?`;
冰淇淋类成分{
浇头=[];
@可确认(confirmStatement1)
@可确认(confirmStatement2)
添加浇头(浇头){
这个。浇头。推(浇头);
}

}
descriptor.value=function(…args){
返回的值不会传递给下一个装饰器。它是
原始的.apply(this,args);
invoke实际上调用了另一个装饰器

我添加了更多详细的日志记录,因为它一开始并不直观

console.log('pre-original.apply(this,args);'))
const result=original.apply(此参数为args);
console.log('original.apply(this,args);')
返回结果;
在代码段中传输的代码

var uu decoration=(this&&this.u decoration)|函数(decorators、target、key、desc){
var c=arguments.length,r=c<3?目标:desc==null?desc=Object.getOwnPropertyDescriptor(目标,键):desc,d;
if(typeof Reflect==“object”&&typeof Reflect.decoration==“function”)r=Reflect.decoration(decorators、target、key、desc);
如果(d=decorators[i])r=(c<3?d(r):c>3?d(target,key,r):d(target,key))| r;
返回c>3&&r&&Object.defineProperty(target,key,r),r;
};
const confirmStatement1=`你确定吗?`;
const confirmStatement2=`你非常确定吗?`;
功能可确认(消息){
返回函数(目标、键、描述符){
const original=descriptor.value;
descriptor.value=函数(…args){
const allow=Math.random()>0.5?真:假;
log(`${message}-允许的值为${allow}`);
如果(允许){
console.log('pre-original.apply(this,args);');
const result=original.apply(此参数为args);
console.log('original.apply(this,args);');
返回结果;
}
否则{
log(`Stopping others running…`);
返回null;
}
};
返回描述符;
};
}
冰淇淋类成分{
构造函数(){
这个。浇头=[];
}
添加浇头(浇头){
这个。浇头。推(浇头);
}
}
__装饰([
可确认(确认声明1),
可确认(confirmStatement2)
],IceCreamComponent.prototype,“addTopping”,null);
const myIceCream=新的冰淇淋成分();
const-possibletopings=[“薄片”、“咸焦糖糖浆”、“覆盆子糖浆”、“巧克力冻”、“洒”];
for(设i=0;i<5;i++){
我的冰淇淋。添加配料(可能的配料[i]);
}
console.log(myIceCream.toppings);