es6 --- 正确获取Generator函数内部的this对象使其可以使用new
首先看2个例子
function * g() {this.a = 11;
}let o = g();
console.log(o.a);
可以看见Generator函数里面的this指向的对象取不出来.
再看下一个例子:
function* F() {yield this.x = 2;yield this.y = 3;
}
new F();
可以看出Generator函数无法使用new操作符,
下面一共一个解决方案:使之可以使用new 和 将this对象正确取出来
function* gen() {this.a = 1;yield this.b = 2;
}// 传入gen的原型对象,并使用call方法绑定作用域..可以解决this作用域问题
// 将F改造成构造函数的形式可以解决new 问题
function F() {return gen.call(gen.prototype);
}var f = new F();
console.log(f.next());
console.log(f.next());
console.log(f.a);
console.log(f.b);
可以看到.并没有报错,并且this正确绑定到实例f上了.f也可以使用next方法.
参考《ES6标准入门》(第三版) P343~P345
es6 --- 正确获取Generator函数内部的this对象使其可以使用new相关推荐
- es6 中的generator函数控制流程
Generator函数跟普通函数的写法有非常大的区别: 一是,function关键字与函数名之间有一个星号: 二是,函数体内部使用yield语句,定义不同的内部状态(yield在英语里的意思就是&qu ...
- ES6入门之Generator函数
Generator Generator函数是ES6提供的一种异步编程解决方案,Generator函数是一个状态机,封装了多个内部状态. 执行Generator函数会返回一个遍历器对象,也就是说,Gen ...
- es6中的generator函数详解
Generator 函数的定义 语法上,Generator 函数是一个状态机,封装了多个内部状态. 形式上,Generator是一个函数.不同于普通函数,是可以暂停执行的,所以函数名之前要加星号,以示 ...
- 【ES6】阮一峰ES6学习之Generator 函数(一)
Generator 1. 概念 2. yield表达式 1. 概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度 ...
- es6 Class 的 Generator函数
Class 的 Generator函数 如果某个方法之前加上星号(*),就表示该方法是一个 Generator函数. class Foo { constructor(...args) { this.a ...
- ES6必知必会 (七)—— Generator 函数
Generator 函数 1.Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同,通常有两个特征: function关键字与函数名之间有一个星号: 函数体内部使 ...
- ES6语法总结(21)--Generator函数的异步应用
Generator 函数的异步应用 传统方法 基本概念 Generator 函数 Thunk 函数 co 模块 异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是&q ...
- 理解 ES6 Generator 函数
Generator函数是ES6引入的新型函数,用于异步编程,跟Promise对象联合使用的话会极大降低异步编程的编写难度和阅读难度. Generator函数跟普通函数的写法有非常大的区别: 一是,fu ...
- 【ES6】Generator函数详解
[ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...
最新文章
- CSS粘住固定底部的5种方法
- go微服务框架-gomicro试用
- 06-广度优先搜索:图、队列
- 模块 hashlib模块
- ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段...
- MFC工作笔记0008---UDP协议通信_sendto 和 recvfrom 浅析与示例
- Perl入门(七) Perl脚本的调试
- 区块链 共识算法 分类
- 触类旁通:图形、图片、与表单控件
- 华为手机字体改简体_华为手机字体怎么更换简体
- Webtrends网站运营分析解决方案简介
- 怎么让字体拥有金属风格?15种不同的金属风格文字效果ps样式不可错过!
- Java实现 蓝桥杯 生命游戏
- 5e服务器显示steam名字,5e为什么不显示我csgo的名字(5ecsgo)
- Python os.popen() 方法
- python图片提取文字
- 使用win10自带录屏软件录制视频
- 二进制和文本文件的比较
- Python用正则表达式根据格式匹配成语,如:AABB,AABC,ABAC......
- 常见的块元素 行内元素 行内块元素
热门文章
- python partition by函数_python – 避免Spark窗口函数中单个分区模式的性能影响
- vue获取元素距离页面顶部的距离_VUE实时监听元素距离顶部高度的操作
- matlab207a,MATLAB教程R2012a课后习题答案
- hbase 查询固定条数_HBase原理深入
- php截取字符串函数 左右,php截取中文字符串函数的技巧
- c#基础知识梳理(四)
- NOIP 2016【蚯蚓】
- thinkphp自定义模板标签(一)
- HTML 表格中的行合并与列合并
- java面向对象的特征二:继承性 —(14)