代码之家  ›  专栏  ›  技术社区  ›  Michael Jay

jQuery动画化完整参数,仅用作匿名函数,不用作函数指针

  •  0
  • Michael Jay  · 技术社区  · 12 年前

    我删除了一个带有以下jQuery动画的dom元素:

            var $id = $(this._id); // id of a dom element
            $id.animate({
                width:          "10vw",
                fontSize:       "0.33vw",
            }, 300, "swing", function() {
                $id.remove();
            });
    

    这很好用。但我想把它短一点,并试着:

            var $id = $(this._id); // id of a dom element
            $id.animate({
                width:          "10vw",
                fontSize:       "0.33vw",
            }, 300, "swing", $id.remove);
    

    这不是。为什么不呢?我想,这是一样的。。。

    1 回复  |  直到 12 年前
        1
  •  1
  •   alex    12 年前

    $id.remove 作为一个 函数指针 (我称之为函数引用)将丢失其上下文,即 this 价值,意味着 remove() 不知道该处理什么集合。

    试着传球 $.proxy($.fn.remove, $id) 。这将调用jQuery的 删除() 方法,使用的上下文 $id . $.proxy() 是的跨浏览器实现 Function.prototype.bind() .

    通常也会看到将调用封装在匿名函数中,以防止遇到问题。