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;
};


0
0

Angular 开发拼多多webapp 从基础到项目实战

高仿拼多多WebApp,带你在实战环境中学习Angular

1322 学习 · 451 问题

查看课程