`

ES6中this和箭头方法

阅读更多

之前写多页面应用时,一个页面就是全部,this常常默认是全局对象,但this的正确理解不限于此,特别是大型复杂结构的脚本。
例如:

export class ThisScope {
    txt:string = "hello this scope"
    cf1 () {
        return function() {
            this.showInfo()
        }
    }

    showInfo() {
        console.log(this.txt)
    }
}

当我们调用cf1方法时,出现错误:

> Uncaught TypeError: Cannot read property 'showInfo' of undefined
    at ThisScope.ts:5
    at Object.defineProperty.value (main.ts:11)
    at __webpack_require__ (bootstrap 87e8701…:19)
    at Object.defineProperty.value (bootstrap 87e8701…:62)
    at bootstrap 87e8701…:62

传统形式的代码中,回调函数常常用到,这个时候的this就容易分不清。

ECMAScript 6 箭头语法为我们提供了一个工具,箭头函数能保存函数创建时的 this值,而不是调用时的值:

例如:

export class ThisScope {
    txt:string = "hello this scope"
    cf1() {
        return function() {
            this.showInfo()
        }
    }

    cf2() {
        return () => {this.showInfo()}
    }

    showInfo() {
        console.log(this.txt)
    }
}

上面cf2使用了箭头语法,这个时候我们的this就是函数创建时的值。

另外一种方式是使用bind,例如:

export class ThisScope {
    txt:string = "hello this scope"
    cf1() {
        return function() {
            this.showInfo()
        }
    }

    cf2() {
        return () => {this.showInfo()}
    }

    cf3() {
        return function() {
            this.showInfo()
        }.bind(this)
    }

    showInfo() {
        console.log(this.txt)
    }
}

上面cf3,我们手动绑定this为创建时的值。

更过内容,欢迎加入TypeScript 快速入门 的Chat

TypeScript快速入门

如何用Python爬取网页制作电子书

阅读原文

0
1
分享到:
评论

相关推荐

    关于ES6箭头函数中的this问题

    ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取this的特性,接下来通过本文给大家分享ES6箭头函数中的this,感兴趣的朋友一起看看吧

    ES6新增的箭头函数

    3. 箭头函数内部没有自己的this,使用的是外层函数的this var obj = { fn1:function(){ console.log(this); }, fn2:()=>{ console.log(this); } } obj.fn1(); //obj obj.fn2(); //window 4. 箭头

    详解Javascript ES6中的箭头函数(Arrow Functions)

    箭头函数,若有了解过coffeeScript的同学,或许对此印象深刻,因为它可以让语法省略不少,特别是对于回调函数,会让代码更清晰简洁。下面让我们一起来学习学习ES6中的箭头函数。

    ES6箭头函数和扩展实例分析

    本文实例讲述了ES6箭头函数和扩展。分享给大家供大家参考,具体如下: 1.默认值 在ES6中给我们增加了默认值的操作相关代码如下: function add(a,b=1){ return a+b; } console.log(add(1)); 可以看到现在只需要...

    ES6对象方法声明对象时,箭头函数this的指向问题

    没有this、super、arguments 和 new.target 绑定 不能通过 new 关键字调用 没有 prototype 不可以绑定this 的绑定 不支持argument 不支持重复命名参数 疑问 // 第一种 用 var 定义 value var value = '小明' ...

    JavaScript ES6箭头函数使用指南

    JavaScript ES6箭头函数是一个来自ECMAScript 2015(又称ES6)的全新特性,有传闻说,箭头函数的语法=>,是受到了CoffeeScript 的影响,并且它与CoffeeScript中的=>语法一样,共享this上下

    ES6中javascript实现函数绑定及类的事件绑定功能详解

    本文实例讲述了ES6中javascript实现函数绑定及类的事件绑定功能的方法。分享给大家供大家参考,具体如下: 函数绑定 箭头函数可以绑定this对象,大大减少了显式绑定this对象的写法(call、apply、bind)。但是,箭头...

    JS ES6中setTimeout函数的执行上下文示例

    本文介绍的是setTimeout函数,延迟执行函数里的执行上下文,分享给大家供大家参考学习,来看看详细的内容: (1)ES5中,setTimeout里面的函数的执行上下文为全局...(2)在ES6的箭头函数中,setTimeout里面,如果执行

    免费的ES6学习思维导图

    箭头函数:这是函数的一种简洁表达方式,它允许我们以更简短的形式写函数,并且改变了 this 的绑定方式。 模板字符串与标签模板: 模板字符串:通过反引号 ` 来创建字符串,可以在字符串中嵌入表达式,支持多行字符...

    深入理解Javascript箭头函数中的this

    ES6标准新增了一种新的函数:Arrow Function(箭头函数)。那么下面这篇文章主要给大家介绍了箭头函数中this的相关资料,有需要的朋友可以参考借鉴,下面来一起看看吧。

    JS中this的4种绑定规则详解

    ES6中的箭头函数采用的是词法作用域。 为什么要使用this:使API设计得更简洁且易于复用。 this即不指向自身,也不指向函数的词法作用域。 this的指向只取决于函数的调用方式 this绑定规则 new > 显示绑定 > 隐式绑定...

    nextify:自动将旧的 Javascript 转换为新的 (ES6) Javascript

    转型肥箭化这个转换寻找机会将函数重写为箭头表达式,基于this的使用。 不访问this函数表达式可以安全地重写,因此: myList . map ( function ( x ) { return x + 1 ; } ) 变成: myList . map ( x => x + 1 ) 我们...

    create-decorator:支持在高阶函数基础上直接创造一个es6装饰器, 并可以兼容箭头函数、静态函数、普通prototype函数, 可以说是万能装饰器

    create-decorator项目简介这个库有什么用?虽然高阶函数可以对函数进行包装, 但是对于类而言, 直接使用es6的decorator对类进行装饰...支持箭头函数写法的装饰(decorate没实现), 并且内置了绑定this, 用起来更简洁双兼容,

    es6-learning:https

    ES6引入了两个用于声明变量的新关键字:let和const。 替换变量var使用let代替,以避免吊起。 常量不应更改,因此请使用const 。 箭 您可以使用箭头=>替换function关键字 老的 class TaskCollection { ...

    space-invaders-es6:太空入侵者移植到 ES6

    function()变成() =>和var self = this; 被丢弃。 2. 用类替换原型 使用,原型代码可以放在类中,对象代码可以放在构造函数中。 3. 用 let 替换 var 我将for( var i..替换for( var i.. for( let i..以将i隐藏在...

    关于JavaScript中的this指向问题总结篇

    3:es6的箭头函数中,this指向创建者,并非调用者 4:通过call、apply、bind可以改改变this的指向 下面我们具体分析一下 1:在函数调用时  (非严格模式) const func = function () { console.log(this); const ...

    在你开发微信小程序时能用上的那些ES6特性

    做前端开发的,开始阶段基本会遇到 this 与 闭包 带来的坑————一些异步操作中,回调函数中丢失了当前函数的上下文对象,导致异步操作完成后,更新原有上下文失败。 为了避免这个问题,以前大家都是

Global site tag (gtag.js) - Google Analytics