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

为什么这里的 

Li1 = document.getElementById('li1');

Li1.onmouseout = function(){

startMove(this,'opacity',30,function(){

startMove(Li1,'height',100,function(){

startMove(Li1,'width',200)

})

});

Li1 换成 this 就不行了么?只有一个函数startMove 的时候可以

正在回答

3 回答

对不起,对不起!没看清你问题所在!


补充一下,是这样的。第一个this是通过你对Li1的onmouseout属性的赋值,所以第一个函数可以使用this指代调用方法的对象,这个方法就是函数直接function(){}。


但是第二次调用这个函数的时候,它是作为函数调用而不是方法调用的,没有调用它的对象,所以用this不行。

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

因为startMove()是函数,而不是DOM的方法,

除非你在那个startMove的js代码块的头部加上

Object.prototype.startMove=startMove;

然后你才能写:

Li1.onmouseout = function(){this.startMove(this,'opacity',30)}

当然,要是这样的话,也不用传入obj了,直接把startMove()函数块里面的obj统统换成this,去掉函数定义里面的这个残烛,函数就写成这样了:

定义  function startMove(attr,iTarget,fn){…}

调用   Li1.onmouseout = function(){this.startMove('opacity',30)}

你看,跟jquery是一模一样吧。


jquery的$()本身就是一个函数对象,它早就给$()这个函数对象添加过animate()方法了。


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

不好玩

上面把“参数”打成“残烛”了……
2014-12-15 回复 有任何疑惑可以回复我~

我也是一样的,换了this之后就用不了,我还以为是编译器的问题呢

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

举报

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

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

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