this是Javascript语言的一个关键字。
它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。例如:
function person() { this.name = 'jack'; this.age = 12; }
函数使用场合的不同,this的值也会发生相应变化。但是有一个总的原则,那就是this指的是,调用该函数的那个对象。
下面来说说this的用法。
function person() { this.age = 12; alert(this.age); } person(); // 12
这个是通常的用法,this代表全局对象Global,实则,person的调用是 window.peroson() this-》window
var age = 12; function person() { alert(this.age); } person(); // 12
我们可以看一下 ,将age在全局声明,结果仍是12;
那我们再来变一下:
var age = 12; function person() { this.age = 10; alert(this.age); } person(); alert(age) // 10
=============================================================
function person() { alert(this.age); } var obj = new Object(); obj.age = 10; obj.fn = person; obj.fn();
上面我们创建一个空对象 给对象的age属性赋值,对象的方法就是person,直接调用 ,此时this的调用对象是obj,obj的age是10;
===========================================================
function person() { this.age = 10; } var obj = new person(); alert(obj.age)
我们来用person创建一个构造函数 此时函数生成一个新的对象,很多人可能不太明白这个对象的由来:
function person() { var obj = new Object(); obj.age = 10; return obj; } // var obj = new person(); alert(person().age)
这样写会不会看起来一下豁然开朗呢?原来当我们new person()的时候,perison内部会自动创建一个空对象赋值给this,然后再返回this。所以自然就可以用新创建的构造函数去操作了!
var age = 12; function person() { this.age = 10; } var obj = new person(); alert(age) //12
而此时age的值是12 ,不难看出,这时的age已经并不是全局的了。当然如果把构造函数干掉 变成window.person();age依然是全局,想必大家已经明白了this的用法了
==========================================================
var age = 12; function person() { alert(this.age); } var obj = new Object(); obj.age = 10; obj.fn = person; obj.fn.apply();//12
最后说一下,apply和call吧,改变this指向,像这样obj.fn.apply(obj) 括号内放this要指向的对象。这样对象指向obj结果将会是obj的age
文笔粗糙,如有错误,忘大神指正。