suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - js的this绑定问题

function foo() {
    console.log( this.a );
}

var obj = {
    a: 2
};

var bar = function() {
    foo.call( obj );
};

bar.call( window ); // 2

问题是,为什么无法绑定到window对象?

大家讲道理大家讲道理2896 Tage vor290

Antworte allen(4)Ich werde antworten

  • 怪我咯

    怪我咯2017-04-10 15:32:08

    bar.call( window );
    

    对于bar而言,this已经绑定到window对象上了,但是对于里层的foo

     foo.call( obj );
    

    this是绑定到obj对象上的,this.a就相当于obj.a;查找a的时候不会访问到外层的bar对象,所以bar绑定在window上也不会影响foo的结果。

    Antwort
    0
  • PHPz

    PHPz2017-04-10 15:32:08

    bar的调用对象确实改为了window,但是问题在这里:

    var bar = function() {
        foo.call( obj );
    };
    

    或许你是想这样,输出undefined

    var bar = function () {
        foo.call(this);
    }
    

    Antwort
    0
  • ringa_lee

    ringa_lee2017-04-10 15:32:08

    当然可以绑定到 window 对象,但是你上面这段代码是把 bar 方法中的 this 绑定到了 window 对象,而 foo 方法中的 this 绑定的还是 obj 对象

    Antwort
    0
  • 怪我咯

    怪我咯2017-04-10 15:32:08

    function foo() {
    console.log( this.a );
    }

    var obj = {
    a: 2
    };

    var bar = function() {
    console.log(this.a); // 这里作用域才是window
    foo.call( obj ); //

    };

    window.a = 22;
    bar.call( window ); // 22

    Antwort
    0
  • StornierenAntwort