如何在没有箭头函数的情况下重写这个 JS 方法?

Posted

技术标签:

【中文标题】如何在没有箭头函数的情况下重写这个 JS 方法?【英文标题】:How to rewrite this JS Method without the Arrow Functions? 【发布时间】:2022-01-08 11:35:16 【问题描述】:

我需要从 animate.style 中删除以下方法的箭头函数;我需要在不支持箭头功能的旧版 chromium 浏览器 (40) 上运行此代码。我正在尝试将其转变为传统的遗留函数,但由于我的大脑似乎只使用箭头函数,所以不断出现语法错误。非常感谢您对这一挑战的任何帮助!

const animateCSS = (element, animation, prefix = 'animate__') =>
  // We create a Promise and return it
  new Promise((resolve, reject) => 
    const animationName = `$prefix$animation`;
    const node = document.querySelector(element);

    node.classList.add(`$prefixanimated`, animationName);

    // When the animation ends, we clean the classes and resolve the Promise
    function handleAnimationEnd(event) 
      event.stopPropagation();
      node.classList.remove(`$prefixanimated`, animationName);
      resolve('Animation ended');
    

    node.addEventListener('animationend', handleAnimationEnd, once: true);
  );

这就是我们使用上述方法的方式,其中还包含一个箭头函数:

animateCSS('.my-element', 'bounce');

// or
animateCSS('.my-element', 'bounce').then((message) => 
  // Do something after the animation
);

【问题讨论】:

顺便说一句,如果您想为旧版浏览器编写代码,我真的建议您查看babel。它将让您利用现代 javascript 的所有功能,同时确保向后兼容性。 【参考方案1】:

删除 =>。 在功能块之前添加功能关键字。 不要留下任何未包装的块。

const animateCSS = function (element, animation, prefix = 'animate__') 
  // We create a Promise and return it
  new Promise(function (resolve, reject) 
    const animationName = `$prefix$animation`;
    const node = document.querySelector(element);

    node.classList.add(`$prefixanimated`, animationName);

    // When the animation ends, we clean the classes and resolve the Promise
    function handleAnimationEnd(event) 
      event.stopPropagation();
      node.classList.remove(`$prefixanimated`, animationName);
      resolve('Animation ended');
    

    node.addEventListener('animationend', handleAnimationEnd, once: true);
  );
  
  
  animateCSS('.my-element', 'bounce');

// or
animateCSS('.my-element', 'bounce').then(function (message) 
  // Do something after the animation
);```

【讨论】:

如果这不起作用,请告诉我。 首先,感谢您的回答。这可以删除箭头,但它会破坏该方法,因为在进行此类修改时动画不起作用。我假设它与返回有关,因为它与箭头函数自动返回,并且由于我们删除了它,现在没有任何返回。 承诺真的有效吗?您能否提供一个完整的动画示例,以便我对其进行测试。

以上是关于如何在没有箭头函数的情况下重写这个 JS 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有弃用的“each”函数的情况下重写这个 php“if”语句?

Vue中匿名函数和箭头函数的this

箭头函数的特点

[转]JS 中 this 关键字详解

如何控制JS中的alert跳框?

构造函数,重载与重写的区别,静态成员和方法