希望大家在测试的道路上找到答案,阔步前行
<script type="text/javascript"> /*this指向 console.log(this); function fn(){ console.log(this); } fn(); function Foo(){ this.name="jhon"; this.age=20; console.log(this); } var f1=new Foo(); function Foo(){ this.name="jhon"; this.age=20; console.log(this); } Foo(); var obj={ x:10, fn:function(){ console.log(this); console.log(this.x) } } obj.fn(); var obj={ x:10, fn:function(){ function f(){ console.log(this); console.log(this.x) } f(); } } obj.fn() var obj={ x:10, fn:function(){ console.log(this); console.log(this.x) } } var fn1=obj.fn; fn1(); var obj={ x:10 } var fn=function(){ console.log(this); console.log(this.x); } fn.call(obj); function Foo(){ this.name="jhon"; this.age=20; } Foo.prototype.getName=function(){ console.log(this,this.name); } var foo=new Foo(); foo.getName();*/ </script>
1.谁最终调用函数,this指向谁。
①this指向的永远只可能是对象!!!
②this指向谁永远不取决于this写在哪,而是取决于函数在哪调用
③this指向的对象,称之为函数的上下文context,也叫函数的调用者
2.this指向的规律(与函数调用的方式息息相关):
this指向的情况,取决于函数调用方式有哪些,
①通过函数名()直接调用:this指向window
②通过对象.函数名()调用的:this指向这个对象
③函数通过数组的一个元素,通过数组下标调用的,this指向这个数组
④函数作为window内置函数的回调函数调用时,this指向window如setTimeout setInterval 等
⑤函数作为构造函数用new关键字调用时,this指向新new出的对象。
如果您实在不愿意自行分析理解,或者基础较为薄弱无力进行分析:请移步