3

如果我在 jQuery 事件中,我不确定如何访问类变量。下面的例子

// <reference path="../typings/jquery/jquery.d.ts" />

export class Notes {

    // I want to access this inside of the click event
    test = "test";

    foo() {
        //works here
        alert(this.test);

        $("#testDiv").click(function () {

            // context of this changes so this no longer works
            alert(this.test);

            // How do I access the test variable in here?
        })
    }
}
4

2 回答 2

6

如果您使用 lambda 表达式,它会绑定this到封闭范围的this.

export class Notes {
    private test: string = "test";

    foo() {
        //works here
        alert(this.test);

        $("#testDiv").click(() => {
            alert(this.test);
        })
    }
}

被翻译成

var Notes = (function () {
    function Notes() {
        this.test = "test";
    }
    Notes.prototype.foo = function () {
        var _this = this;
        alert(this.test);
        $("#testDiv").click(function () {
            alert(_this.test);
        });
    };
    return Notes;
})();
exports.Notes = Notes;

但是请注意,在 jQuery 回调中,您将无法按预期访问 DOMElement,因为this已翻译。如果您希望能够同时执行这两种操作,请自行添加this到闭包中的变量:

export class Notes {
    private test: string = "test";

    foo() {
        alert(this.test);
        var self = this;
        $("#testDiv").click(function() {
            alert(self.test);
            $(this).hide(); // still works
        })
    }
}
于 2013-05-08T17:17:13.720 回答
3

我找到了一种可行的方法,但是我觉得可能有更好的方法?

export class Notes {
    test = "test";

    foo() {
        var self = this;

        $("#testDiv").click(function () {
            alert(self.test);
        })
    }
}
于 2013-05-08T17:14:49.430 回答