typescript - 回调中的 this 关键字不适用于 typescript

标签 typescript this

class Util
{
    callback(callme: () => void)
    {
        callme();
    }
} 


class Greeter {
    greeting: string;
    util: Util;
    Me : Greeter;
    constructor(message: string) {
        this.greeting = message;
        this.util = new Util();
    }
    greet() {
        return "Hello, " + this.greeting;
    }

    callMe()
    {
        this.util.callback(this.greet);         
    }
}

var greeter = new Greeter("world");

var button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function() {
    alert(greeter.callMe());
}

document.body.appendChild(button);

我在使用 this 关键字时遇到问题,当我执行这样的代码时,它没有指向该类。如何使这个应用程序工作?当在像这样的回调中使用时,this 指向窗口...

link to code

最佳答案

更改为

this.util.callback(this.greet.bind(this));

问题是,当您传递对greet方法的引用时,JavaScript只会看到一个函数作为参数传递。当函数执行时,它需要一个新的上下文,并使用“this”此时代表的任何内容。

为了避免这种情况,您可以将函数绑定(bind)到其上下文,并避免在执行时为其分配新的上下文。为此,您可以使用bind。它的第一个参数允许您定义执行函数时应使用的上下文对象。

这在某种程度上相当于:

var self = this;
this.utils.callback(function(){
   self.greet();
});

这相当于您使用 TypeScript 闭包在评论中得到的答案

() => this.greet();

关于typescript - 回调中的 this 关键字不适用于 typescript ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23980711/

相关文章:

java 休息调用获取 url net::ERR_FAILED

javascript - 在快速中间件中调用时,这在原型(prototype)函数中不起作用

javascript - 在 jquery 上下文中调用 this.function

javascript - 在 Javascript ES5 和 ES6 中 Function 对象的调用和 apply 方法的上下文中,use strict 如何影响 this 关键字

javascript - jQuery this.href 字符串比较不起作用

java - Java 中的构造函数问题

javascript - 将多个嵌套的 Promise 和 Promise 数组转换为 Observables

jquery - 在 Angular 2 组件中选择模板元素并传递给 jQuery

生成函数的 TypeScript 通用类型

angular - 从 Angular 8 的下拉列表中删除/禁用选定的选项(动态创建的)