在视频中实现链式动画时,仍然采用多物体的形式,于是有如下代码:
oli[i].onmouseover=function(){
fnmove(this,'width',200,function(){
fnmove(this,'height',300);});}
发现这样写实现不了链式效果,而改成如下代码则可以;
oli[i].onmouseover=function(){
var othis=this;
fnmove(othis,'width',200,function(){
fnmove(othis,'height',300);});}
所以,想请问this到底应该怎么用?在我的错误的代码中第二个this(即标为斜体的this)指向什么?谢谢!
如果当前执行的是一个对象的方法,则执行上下文就是这个方法所附属的对象。
如果一个方法在执行时没有明确指定附属对象,则这个方法的上下文为全局对象。
第一个this的对象是oli[i],但是第二个this并没有明确指定附属对象
就像下面的例子
2、用DOM方式在事件处理函数中使用this关键字
<div id="elmtDiv">division element</div> <script language="javascript"> var div = document.getElementById('elmtDiv'); div.attachEvent('onclick', EventHandler); function EventHandler() { // 在此使用this } </script>
这时的EventHandler()方法中的this关键字,指示的对象是IE的window对象。这是因为EventHandler只是一个普通的函数,对于attachEvent后,脚本引擎对它的调用和div对象本身没有任何的关系。同时你可以再看看EventHandler的caller属性,它是等于null的。如果我们要在这个方法中获得div对象引用,应该使用:this.event.srcElement。
3、用DHTML方式在事件处理函数中使用this关键字
<div id="elmtDiv">division element</div> <script language="javascript"> var div = document.getElementById('elmtDiv'); div.onclick = function() { // 在此使用this }; </script>
这里的this关键字指示的内容是div元素对象实例,在脚本中使用DHTML方式直接为div.onclick赋值一个EventHandler的方法,等于为div对象实例添加一个成员方法。这种方式和第一种方法的区别是,第一种方法是使用HTML方式,而这里是DHTML方式,后者脚本解析引擎不会再生成匿名方法。
有关this的用法,http://www.studyofnet.com/news/301.html