es6 为什么修饰器不能用于函数
为什么修饰器不能用于函数
ES6 修饰器只能用于类和类的方法,不能用于函数,因为存在函数提升。
var counter = 0;
var add = function () {
counter++;
};
@add
function foo() {
}
上面的代码,意图是执行后counter
等于 1,但是实际上结果是counter
等于 0。因为函数提升,使得实际执行的代码是下面这样。
@add
function foo() {
}
var counter;
var add;
counter = 0;
add = function () {
counter++;
};
下面是另一个例子。
var readOnly = require("some-decorator");
@readOnly
function foo() {
}
上面代码也有问题,因为实际执行是下面这样。
var readOnly;
@readOnly
function foo() {
}
readOnly = require("some-decorator");
总之,由于存在函数提升,使得修饰器不能用于函数。类是不会提升的,所以就没有这方面的问题。
另一方面,如果一定要修饰函数,可以采用高阶函数的形式直接执行。
function doSomething(name) {
console.log('Hello, ' + name);
}
function loggingDecorator(wrapped) {
return function() {
console.log('Starting');
const result = wrapped.apply(this, arguments);
console.log('Finished');
return result;
}
}
const wrapped = loggingDecorator(doSomething);
es6 为什么修饰器不能用于函数相关推荐
- python 函数修饰器 父类_Python函数嵌套、回调函数、闭包、装饰器和类
markdown内容:Python函数嵌套.回调函数.闭包.装饰器和类 一级标题:主要描述内容 二级标题:各个内容 三级标题:重要概念 一.函数嵌套 1.1.作用域和嵌套函数 LEGB查找规则的 E, ...
- es6 Trait修饰器
Trait修饰器 ES6 Trait 也是一种修饰器,效果与 Mixin 类似,但是提供更多功能,比如防止同名方法的冲突.排除混入某些方法.为混入的方法起别名等等. 下面采用traits-decora ...
- es6 使用修饰器实现Mixin模式
使用修饰器实现Mixin模式 在修饰器的基础上,可以实现Mixin模式.所谓Mixin模式,就是对象继承的一种替代方案,中文译为"混入"(mix in),意为在一个对象之中混入另外 ...
- es6 使用修饰器实现自动发布事件
使用修饰器实现自动发布事件 我们可以使用修饰器,使得对象的方法被调用时,自动发出一个事件. const postal = require("postal/lib/postal.lodash& ...
- ES6里的修饰器Decorator
修饰器(Decorator)是一个函数,用来修改类的行为. 一.概述 ES6 引入了这项功能,目前 Babel 转码器已经支持Decorator 首先,安装babel-core和babel-plugi ...
- “睡服”面试官系列第二十三篇之修饰器(建议收藏学习)
目录 1. 类的修饰 2. 方法的修饰 3. 为什么修饰器不能用于函数? 4. core-decorators.js 4.1@autobind 4.2@readonly 4.3@override 4. ...
- python函数修饰器_Python函数装饰器指南
Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...
- python使用内置方法和修饰器方法获取类名、函数名
1. 外部获取 从外部的情况好获取,可以使用指向函数的对象,然后用__name__属性. def a():pass a.__name__ 或者 getattr(a,'__name__') 2. 内部获 ...
- python中的函数修饰器
python中的函数修饰器 – @wrapper 简介 类似于C#的属性.Java的注解,python也有对应的修饰符.从Python2.7和Python3开始,提供了以'@'为标示的修饰符,可以在模 ...
最新文章
- 零基础小白如何学习好UI设计
- MySQL 数据库性能优化,看这篇就够了
- 中科院超牛的物理学家,摇滚界无人不知的“李白”,你一定听过他的歌!
- LeetCode--single-number复杂度
- linux centos 7 crontab 启动,CentOS 7 Linux执行crontab 计划任务实操 - 好应网
- linux内核计算list的长度,Linux内核通用链表 linux/list.h阅读
- mysql 窗口函数_MySQL数分:窗口函数
- 安装Flutter环境
- mysql双向复制_MySQL 双向复制
- Sql Server中清空所有数据表中的记录
- Android软件测试的日志文件问题
- window location href 手机端无法跳转_JavaScriptBOM__History_location(二十)
- VBA编程_常用函数总结1
- 【IOS网络通信】socket第三方库 AsyncSocket(GCDAsyncSocket)
- 初学者应该选择什么样吉他桶型?新手入门畅销民谣吉他牌子推荐
- NetGear stora 重置成功后,个人文件夹丢失的找回办法
- html网页运行环境,网站运行的环境要求
- 什么是RSS?RSS是什么
- 综合布线施工的技术交底
- String比较字符串方法