var name = "Bob";
var nameObj ={
name : "Tom",
showName : function(){
alert(this.name);
},
waitShowName : function(){
setTimeout(this.showName, 1000);
setTimeout(function(){
nameObj.showName()
}, 1000);
}
};
nameObj.waitShowName();
一般而言,在Javascript中,this指向函数执行时的当前对象
The this keyword is relative to the execution context, not the declaration context.
- 当没有明确的执行时的当前对象时,this指向全局对象window。
var obj = {
bar: "bar",
foo: function(){
console.log(this);
}
};
obj.foo();
var bar = obj.foo;
bar()
- 在浏览器中setTimeout、setInterval和匿名函数执行时的当前对象通常是是全局对象window,当然也有例外
foo(function (){
console.log(this)
});
function foo(fn){
fn.call({});
}
//el.addEventListener('click', bar, false);
*eval函数 指向当前执行环境
var name = "window";
var Bob = {
name: "Bob",
showName: function(){
eval("alert(this.name)");
}
};
Bob.showName(); //Bob
当然还有很多很多例子,
涉及 new 还有es5中的 call,apply,bind, 以及es6中的() => {} lambda
有趣的例子(λx.x*x)(λx.x+2) js可以写成 (x => x + 2)((x => x * x)(2))
不一一列举了。