1、

var x = 10;
var obj = {
    x: 20,
    f: function(){
        console.log(this.x);        // ?
        var foo = function(){ 
            console.log(this.x);    
            }
        foo();                      // ?
    }
};
obj.f();
  • obj.f() 执行的时候很明显是默认绑定,绑定到了obj上。
  • 执行foo() 的时候前面没有任何东西,显然是默认绑定。 答案为:20 10

var x = 10;
var obj = {
    x: 20,
    f: function(){ console.log(this.x); }
};
var bar = obj.f;
var obj2 = {
    x: 30,
    f: obj.f
}
obj.f(); //20
bar();   //10
obj2.f();//30
  • 执行obj.f()是隐式绑定,this指向obj的x
  • 执行bar()是显式绑定,this指向window的x
  • 执行obj2.f()是隐式绑定,this指向obj2的x 答案为:20 10 30

function foo() {
    getName = function () { console.log (1); };
    return this;
}

foo.getName = function () { console.log(2);};
foo.prototype.getName = function () { console.log(3);};
var getName = function () { console.log(4);};
function getName () { console.log(5);}
 
foo.getName ();                // ? 2
getName ();                    // ? 4
foo().getName ();              // ? 
getName ();                    // ? 5
new foo.getName ();            // ? 1
new foo().getName ();          // ? 
new new foo().getName ();      // ? 
function foo(arg){
    this.a = arg;
    return this
};

var a = foo(1);
var b = foo(10);

console.log(a.a);    // ?
console.log(b.a);    // ?
- 执行```foo(1)```的时候函数foo里this指向window,相当于foo函数里的
```window.a = 1, return window``` ,所以此时```var a = foo(1)```
里的a相当于window```a.a```相当于```window.a```,答案为```undefined```
- 执行```foo(10)```的时候函数foo里this指向window, ```window.a = 10, return window``` -->