问答详情
源自:5-1 JS链式动画

为什么这里的 

Li1 = document.getElementById('li1');

Li1.onmouseout = function(){

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

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

startMove(Li1,'width',200)

})

});

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

提问者:Frank337903 2014-10-05 23:38

个回答

  • 不好玩
    2014-12-15 10:54:40

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


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


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

  • 不好玩
    2014-12-15 09:36:46

    因为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()方法了。


  • HOLY_0002
    2014-10-17 22:07:15

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