对于我这种初学者来说this指的到底是哪里,实在头疼,再有了前面关于变量和作用域的概念后,今天我觉定学习关于this的用法,把这个烦人的家伙解决掉!
转载于: http://blog.sina.com.cn/s/blog_68cb8c790100ytl5.html
(一)关于this首先关于this我想说一句话,这句话记住了this的用法你也就差不多都能明白了:this指的是当前函数的对象 。这句话可能比较绕,我会举出很多例子和这句话 呼应 的!(看下文)
1.首先看下面这段代码, 定义一个函数,弹下this,
function doSomething(){
alert(this);
}
doSomething();
}
doSomething();
我是在firefox里面调试的,所以返回的结果是[Object Window]。
那么这个 [Object Window], 到底是什么呢?看看下面的代码
function doSomething(){
alert(this===window);
}
doSomething();
看到弹出了true, 也就是说在这种正常情况下,this其实就是window
所以,我们定义了一个全局的变量的时候,可以
var test="Tony";
也可以
window["test"]="Tony";
下面这个例子,进一步说明,正常情况下,函数里的this就是window
var test="Tony";
function doSomething(){
alert(this.test); //弹出 "Tony";
alert(window.test); //弹出 "Tony";
}
doSomething();
第一次呼应
:通过以上几个例子,我想可以说这几个例子中得this指的就是他当前函数doSomething()的Window对象。那顾名思义this.test自然就等于window.test了。事实也是如此。
那么这个 [Object Window], 到底是什么呢?看看下面的代码
function doSomething(){
}
doSomething();
看到弹出了true, 也就是说在这种正常情况下,this其实就是window
所以,我们定义了一个全局的变量的时候,可以
var test="Tony";
也可以
window["test"]="Tony";
下面这个例子,进一步说明,正常情况下,函数里的this就是window
var test="Tony";
function doSomething(){
}
doSomething();
2.我再举一个闭包的例子,但是在这里我不会解释什么是闭包,只是讲this的用法,明天我会学习闭包,今天就先当他是一个未知数,来学习this的一个工具。
第二次呼应: 现在再看代码红色部分做的修改,this是不是指的是当前doSomething()函数的object对象了?那再输出结果自然就是"My Object"了。
(二)关于call
还是以doSomething函数为例:
现在我们只是做了函数的调用,还没有改变this那么怎么改变 this 呢?这个时候call就要发挥威力了。
本来doSomething函数里的this表示的是 window ,我们执行下面这句。
这个时候doSomething里的this就变成了"某个对象",看下面的例子:
上面代码,我们可以看出,相比普通调用, call 只是多了一个用来指定this的参数,call 干什么用的?就是干这个用的!!现在有体会了吧?
(三)关于apply
都知道call的用法了,apply其实是一个意思。只不过是调用参数的形式不一样罢了。
call是一个一个调用参数,而apply是调用一个数组。还是用上面相同的例子:
上面这写代码写红色部分就是apply的用法,怎么样?简单吧?
明天我将会写关于call,callee,和caller的用法