相对于简单的Promise版本,sleep的实现照样没变。不过在调用sleep的前面加一个await,如许只有sleep这个异步完成了,才会接下落行下面的代码。同时须要把代码逻辑包在一个async标记的函数琅绫擎,这个函数会返回一个Promise对象,当琅绫擎的异步都履行完了就可以then了:
- class DrawTool {
- constructor() {
- this.points = [];
- }
- handleMouseClick(event) {
- this.points.push(event.latLng);
- }
- init() {
- let that = this;
- $map.on('click', event => that.handleMouseClick(event));
- }
- }
因为回调函数是用that履行的,而that是指向DrawTool的实例子,是以就没有问题了。相反如不雅没有that它就用的this,所以就要看this指向哪里了。
因为我们用了箭头函数,而箭头函数的this照样指向父级的高低文,是以这里不消本身创建一个闭包,直接用this就可以:
- init() {
- $map.on('click',
- event => this.handleMouseClick(event));
- }
这种方法加倍简单,第二种办法是应用ES5的bind函数绑定,如下代码:
- init() {
- $map.on('click',
- this.handleMouseClick.bind(this));
- }
- function throttle(method, context) {
- if (method.tId) {
- return;
- }
- method.tId = setTimeout(function() {
- method.call(context);
- method.tId = 0;
- }, 100);
- }
- Function.prototype.bind = function(context) {
- return () => this.call(context);
- }
就是返回一个函数,这个函数的this是指向的原始函数,然后让它call(context)绑定一下履行高低文就可以了。
4. 柯里化
柯里化就是函数和参数值结合产生一个新的函数,如下代码,假设有一个curry的函数:
- function
推荐阅读
本篇是看的《JS高等法度榜样设计》第23章《高等技能》做的读书分享。本篇按照书里的思路根据本身的懂得和经验,进行扩大延长,同时指出版里的一些问题。将会评论辩论安然的类型检测、惰性>>>详细阅读
本文标题:JavaScript高级程序设计高级技巧
地址:http://www.17bianji.com/lsqh/37134.html
1/2 1