为了账号安全,请及时绑定邮箱和手机立即绑定

关于this

在视频中实现链式动画时,仍然采用多物体的形式,于是有如下代码:

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)指向什么?谢谢!

正在回答

1 回答

如果当前执行的是一个对象的方法,则执行上下文就是这个方法所附属的对象。

如果一个方法在执行时没有明确指定附属对象,则这个方法的上下文为全局对象。

第一个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

0 回复 有任何疑惑可以回复我~
#1

慕粉3498277 提问者

还没完全看明白,之后慢慢消化。不过超级感谢你,码这么多字,谢谢!
2016-07-18 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JS动画效果
  • 参与学习       113926    人
  • 解答问题       1443    个

通过本课程JS动画的学习,从简单动画开始,逐步深入各种动画框架封装

进入课程
意见反馈 帮助中心 APP下载
官方微信