关于js中this指向的简单理解(一)
对于一下几种情况,我认为网上说的,谁调用就this就指向谁是可以解释的通的;甚至我觉得可以理解为适用于就近原则,意思就是谁最靠近调用这个函数的,那么this就指向谁;
ps:1.this在函数创建(定义)的时候是无法确定的,只有在调用的时候才可以确定;
2.window是js中全局的变量,在我的理解中是最顶层的对象,在<script>.</script>最外层定义的函数与变量,其实都是在给window对象定义属性;
var a = 55 function fn(){ var a = 3; console.log(this); // this -> window console.log(this.a); //55 console.log(a); // 3; } fn(); // 此处是调用window调用fn();实际上是window.fn();
function fn(){ var a = 3; console.log(this); // this -> window console.log(this.a); //undefined 因为this指向window,window对象中,并没有a这个属性,所以打印this.a 为undefined console.log(a); // 3; } fn(); // 此处是调用window调用fn();实际上是window.fn();
var obj = { a: 66, fn: funciton(){ var b = 45; console.log(this.a); // 66调用fn()的是obj,因此this指向的是obj;在obj中存在a这个属性 } } obj.fn()
var obj = { a: 44, b: { a: 36, fn: function() { console.log(this.a); // 36 最靠近调用fn() 的是 b这个对象,b对象中的a属性的值是36 } } }; obj.b.fn();
var obj = { a: 44, b: { // a: 36, fn: function() { console.log(this.a); // undefined 最靠近调用fn() 的是 b这个对象,b对象中的不存在a这个属性 } } }; obj.b.fn();
var obj = { a: 44, b: { // a: 36, fn: function() { console.log(this.a); // undefined 最靠近调用fn() 的是 window这个对象,window对象中的不存在a这个属性 } } }; var j = obj.b.fn; // 此处是把 obj.b 中的fn这个属性的值赋值给j这个变量,这个步骤中,实际上并没有执行函数; j(); //此处执行fn函数,实际上市window.j()