首先看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相关推荐

  1. es6 中的generator函数控制流程

    Generator函数跟普通函数的写法有非常大的区别: 一是,function关键字与函数名之间有一个星号: 二是,函数体内部使用yield语句,定义不同的内部状态(yield在英语里的意思就是&qu ...

  2. ES6入门之Generator函数

    Generator Generator函数是ES6提供的一种异步编程解决方案,Generator函数是一个状态机,封装了多个内部状态. 执行Generator函数会返回一个遍历器对象,也就是说,Gen ...

  3. es6中的generator函数详解

    Generator 函数的定义 语法上,Generator 函数是一个状态机,封装了多个内部状态. 形式上,Generator是一个函数.不同于普通函数,是可以暂停执行的,所以函数名之前要加星号,以示 ...

  4. 【ES6】阮一峰ES6学习之Generator 函数(一)

    Generator 1. 概念 2. yield表达式 1. 概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度 ...

  5. es6 Class 的 Generator函数

    Class 的 Generator函数 如果某个方法之前加上星号(*),就表示该方法是一个 Generator函数. class Foo { constructor(...args) { this.a ...

  6. ES6必知必会 (七)—— Generator 函数

    Generator 函数 1.Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同,通常有两个特征: function关键字与函数名之间有一个星号: 函数体内部使 ...

  7. ES6语法总结(21)--Generator函数的异步应用

    Generator 函数的异步应用 传统方法 基本概念 Generator 函数 Thunk 函数 co 模块 异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是&q ...

  8. 理解 ES6 Generator 函数

    Generator函数是ES6引入的新型函数,用于异步编程,跟Promise对象联合使用的话会极大降低异步编程的编写难度和阅读难度. Generator函数跟普通函数的写法有非常大的区别: 一是,fu ...

  9. 【ES6】Generator函数详解

    [ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...

最新文章

  1. CSS粘住固定底部的5种方法
  2. go微服务框架-gomicro试用
  3. 06-广度优先搜索:图、队列
  4. 模块 hashlib模块
  5. ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段...
  6. MFC工作笔记0008---UDP协议通信_sendto 和 recvfrom 浅析与示例
  7. Perl入门(七) Perl脚本的调试
  8. 区块链 共识算法 分类
  9. 触类旁通:图形、图片、与表单控件
  10. 华为手机字体改简体_华为手机字体怎么更换简体
  11. Webtrends网站运营分析解决方案简介
  12. 怎么让字体拥有金属风格?15种不同的金属风格文字效果ps样式不可错过!
  13. Java实现 蓝桥杯 生命游戏
  14. 5e服务器显示steam名字,5e为什么不显示我csgo的名字(5ecsgo)
  15. Python os.popen() 方法
  16. python图片提取文字
  17. 使用win10自带录屏软件录制视频
  18. 二进制和文本文件的比较
  19. Python用正则表达式根据格式匹配成语,如:AABB,AABC,ABAC......
  20. 常见的块元素 行内元素 行内块元素

热门文章

  1. python partition by函数_python – 避免Spark窗口函数中单个分区模式的性能影响
  2. vue获取元素距离页面顶部的距离_VUE实时监听元素距离顶部高度的操作
  3. matlab207a,MATLAB教程R2012a课后习题答案
  4. hbase 查询固定条数_HBase原理深入
  5. php截取字符串函数 左右,php截取中文字符串函数的技巧
  6. c#基础知识梳理(四)
  7. NOIP 2016【蚯蚓】
  8. thinkphp自定义模板标签(一)
  9. HTML 表格中的行合并与列合并
  10. java面向对象的特征二:继承性 —(14)