`
focus2008
  • 浏览: 26413 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

深入理解javascript语言中的this

阅读更多
说到js中的函数中的this指针,就像是悟空的毫毛一样,可以随时变来变去,理解起来十分困难,但是万变不离其宗,都是悟空的毫毛而已 ^-^.

要中文js中的this,只要记住一点:谁调用了该函数,那么该函数中的this就是指的它;如果没有看出是谁调用的,那么就是window调用的,因为只有它有这个权利。下面结合例子来理解:

例子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指针。
0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics