用JavaScript将此上下文绑定

时间:2018-07-06 12:27:24

标签: javascript bind

我试图理解bind方法,并且编写了以下代码:

//
//Window Context
function Hello(d) {
    //Always this reffers to calling context
    console.log(d);
}

Hello("ABC");

function Student(sname) {
    this.name_n = sname;
    this.hello = Hello;
    this.printAfter2Seconds = printAfter2Seconds.bind(this);
    this.print = function() {
        console.log(`Student Name: ${this.name_n}`);
    }
}

printAfter2Seconds = function() {
    console.log(`Before Set TimeOut - ${this.name_n}`);
    //let that = this;
    setTimeout(function() {
        //console.log(this);
        console.log(`After Set TimeOut - ${this.name_n}`);
    },2000);
}

function Department(dname) {
    this.name_n = dname;
    this.hello = Hello;
    this.printAfter2Seconds = printAfter2Seconds.bind(this);
}

let s = new Student("ABC");
s.hello(s.name_n);
s.printAfter2Seconds();

let d = new Department("IT");
d.hello(d.name);
d.printAfter2Seconds();

//

如果我评论setTimeout行和以setTimeout结尾的行,如下所示:

//setTimeout(function() {
            //console.log(this);
            console.log(`After Set TimeOut - ${this.name_n}`);
  //      },2000);

我正在获得预期的输出ABC和IT。但是,如果我包含setTimeout,那么两个时间都将变得不确定。因此,我猜测有些地方需要再次调用绑定。这可能不是您每天试图理解绑定的简单例子。

所以我需要了解如何在setTimeout内绑定函数的此上下文,甚至是可能的。

谢谢。

0 个答案:

没有答案