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``` -->