4-1 关于注解函数的这块 有点懵!!!
来源:4-1 什么是注解
丛从绿草
2020-05-11
老师,你好, 这里可以解释下,
const original = descriptor.value; 这里的descriptor.value指的是什么值啊?
还有就是点击事件和@Confirmable(‘你確定要执行嘛?’)这里有关联嘛? 是怎么关联的呢?
为什么不是
handleClick() {
@Confirmable(‘你確定要执行嘛?’)
}这样呢? 好奇怪啊?!
写回答
1回答
-
接灰的电子产品
2020-05-11
首先如果注解写到函数里面还有啥意义啊,直接写函数不就完了?注解的好处就是我不需要关心你原有函数的逻辑,加上这个注解就自动帮你做点特定的事情。你看看 angular 其他注解都是怎么用的?
descriptor 就是对一个属性的描述,比如下面这样一个对象,里面有一个正常属性,一个函数属性
const object1 = { property1: 42, greeting: function() { console.log('Hello'); } }; const descriptor1 = Object.getOwnPropertyDescriptor(object1, 'greeting'); console.log(descriptor1.configurable); // 输出: true console.log(descriptor1.value); // 输出: function() { console.log('Hello'); }那么接下来我们看一下 Confirmable 的源码,可以看一下里面的注释,我觉得应该很清晰了
// 先把注解修饰的函数赋给一个变量 const original = descriptor.value; // 然后替换成下面的函数 descriptor.value = function(...args: any[]) { // 弹出确认对话框 const allow = window.confirm(message); // 如果确认则执行原有函数逻辑 if (allow) { // 执行原有函数,返回该函数结果 const result = original.apply(this, args); return result; } return null; };00
相似问题