深入理解javascript语言中的this
2014-12-07 11:46
106 查看
说到js中的函数中的this指针,就像是悟空的毫毛一样,可以随时变来变去,理解起来十分困难,但是万变不离其宗,都是悟空的毫毛而已 ^-^.
要中文js中的this,只要记住一点:[color=red]谁调用了该函数,那么该函数中的this就是指的它;如果没有看出是谁调用的,那么就是window调用的,因为只有它有这个权利[/color]。下面结合例子来理解:
例子1:
上面函数C中的this指针是执行 o 吗?
首先我们看,对象 o 调用了 函数 C() 吗?没有吧,对象 o 没有做任何事情!所以C中的this指针不是指向 o ,而是widow。这里其实可以看做是 window 调用 “new F()”,所以this指针是window,而不是 o ,因为o 并没有调用任何方法。
例子2:
上面的结果有这么理解呢?
1)因为obj 是一个对象,但是 prop 也是一个对象,所以第一个直接调用 getfullname()的是prop,所以打印的是 direnjie, 而不是 yuanfang
2)第二个 test 是一个全局变量,他的值是一个函数地址,test()调用其实就是:window.test(),所以打印的是全局的fullname,也就是 window.fullname;
如此而已。
关于call和apply会改变函数的调用者,所以也就改变了函数中的this指针。
要中文js中的this,只要记住一点:[color=red]谁调用了该函数,那么该函数中的this就是指的它;如果没有看出是谁调用的,那么就是window调用的,因为只有它有这个权利[/color]。下面结合例子来理解:
例子1:
function F(){
function C(){
return this;
}
return C();
}
var o = new F();
console.log(o); // 打印 Window
console.log(window); // 打印 Window
上面函数C中的this指针是执行 o 吗?
首先我们看,对象 o 调用了 函数 C() 吗?没有吧,对象 o 没有做任何事情!所以C中的this指针不是指向 o ,而是widow。这里其实可以看做是 window 调用 “new F()”,所以this指针是window,而不是 o ,因为o 并没有调用任何方法。
例子2:
var fullname = 'focus2008';
var obj = {
fullname:'yuanfang',
prop:{
fullname:'direnjie',
getfullname:function(){
return this.fullname;
}
}
};
console.log(obj.prop.getfullname()); // direnjie
var test = obj.prop.getfullname; // focus2008
console.log(test());
上面的结果有这么理解呢?
1)因为obj 是一个对象,但是 prop 也是一个对象,所以第一个直接调用 getfullname()的是prop,所以打印的是 direnjie, 而不是 yuanfang
2)第二个 test 是一个全局变量,他的值是一个函数地址,test()调用其实就是:window.test(),所以打印的是全局的fullname,也就是 window.fullname;
如此而已。
关于call和apply会改变函数的调用者,所以也就改变了函数中的this指针。
相关文章推荐
- 深入理解javascript关键字this
- 深入理解JavaScript系列(13):This? Yes,this!
- 深入理解JavaScript的this指向问题
- 深入理解javascript之this
- 深入理解Javascript箭头函数中的this
- JavaScript this 深入理解
- 深入理解Javascript中this的作用域
- 深入理解javascript原型和闭包(10)——this
- 深入理解javascript原型和闭包(10)——this
- 深入理解Javascript的特殊变量this
- 深入理解javascript的一些特性(静态作用域,this指针,闭包)
- 深入理解JavaScript系列(13):This? Yes,this!
- 深入理解javascript原型和闭包(10)——this
- 深入理解Javascript之this关键字
- 深入理解Javascript之this关键字
- Laruence谈:深入理解Javascript之this关键字
- [置顶] [译文]深入理解JavaScript的this关键字(一)
- Javascript之this关键字的深入理解
- 深入理解javascript原型和闭包(10)——this
- 深入理解JavaScript内部原理(3): this