说到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指针。
分享到:
相关推荐
深入理解JavaScript系列(13):This? Yes, this! 深入理解JavaScript系列(14):作用域链(Scope Chain) 深入理解JavaScript系列(15):函数(Functions) 深入理解JavaScript系列(16):闭包(Closures) ...
深入理解 JavaScript 异步
深入理解JavaScript深入理解JavaScript深入理解JavaScript
NULL 博文链接:https://wv1124.iteye.com/blog/505236
深入理解JavaScript系列(13):This Yes this 深入理解JavaScript系列(14):作用域链 Scope Chain 深入理解JavaScript系列(15):函数(Functions) 深入理解JavaScript系列(16):闭包(Closures) 深入...
深入理解Javascript系列
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用...
深入理解JavaScript(美)罗彻麦尔著.pdf
深入理解JavaScript [(美)罗彻麦尔著
javascript原型和闭包
深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系
深入理解JavaScript
JavaScript语言中this指向研究 (1).pdf
JavaScript语言中文参考手册JavaScript语言中文参考手册
深入理解JavaScript中的箭头函数.docx