你真的懂this指向?

先搞清楚一点,如果this在函数里面,那么它指向的是“函数执行后”的上一级调用对象。

var a="this is a";
function main() {
console.log(this.a)//这里this指向window.
}
main()//这里相当于window.main(),默认window对象了,所以可以省略;

var o={
x:"this is x",
y:"this is y",
say:function(){
console.log(this.x);
}
}
o.say();//这里的this指向的是对象o,因为你调用这个say是通过o.say()执行的,那自然指向就是对象o,这里再次强调一点,this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。

var o={
name:"maomin",
say1:function(){
console.log(this.name);//maomin
}
}
window.o.say1();
// 上面几行代码和之前的代码几乎相似,为什么没有指向window,这就回到了我刚开始说的,this如果在函数内,那么它指向的是该函数执行后的上一级调用对象。

var o={
a:"this is a",
b:{
a:"I am a",
say:function(){
console.log(this.a);//this is a
}
}
}
var f=o.b.say;
f();
// 这里肯定有疑问了?为什么会指向o呢,不是应该指向b吗?这时你应该注意到这里say没有调用执行,而是通过o.b.say赋值给变量f,然后才被执行。这样就指向o了。

function Fn(job){
this.job=job;
}
var i=new Fn("I am Engineer");
console.log(i.job);//I am Engineer
// 这里是一个构造函数,注意的是this指向构造函数new出来的对象。
// 首先new关键字会创建一个空的对象,然后会自动调用一个函数的一个方法,将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。

。。。。。。。。。。。。。

作者:Vam的金豆之路

篇幅有限更多请见扩展链接:http://www.mark-to-win.com/tutorial/50952.html

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章