javascript - 如何在多个函数中返回相同的变量

标签 javascript

如何返回__plugin里面addcss没有return __plugin的功能在他们里面。我可以使用更高阶的函数吗?一切都按预期工作,但我想知道并可能重构此代码。

我不想写return __plugin每次只有一次

const $ = (el) => {
  let _plugin = {};
  const element = document.querySelector.bind(document);
  const css = (style) => {
    Object.assign(element(el).style, style)
    return _plugin;
  }
  const add = (c) => {
    element(el).classList.add(c)
    return _plugin;
  }
  _plugin = { add, css }
  return  _plugin
}

谢谢。

最佳答案

您可以创建一个高阶函数来包装 _plugin 对象中的每个函数,这将使您的所有函数都可链接。

const chainable = (obj) => {
  for (const key in obj) {
    const func = obj[key];
    if (typeof func === 'function') {
      obj[key] = function () {
        const val = func.apply(this, arguments);
        return val === undefined ? this : val;
      };
    }
  }
  return obj;
};

const $ = (el) => {
  const element = document.querySelector(el);
  const css = (style) => {
    Object.assign(element.style, style);
  };
  const add = (c) => {
    element.classList.add(c);
  };
  return chainable({ add, css });
};

/* Testing code */

$('#test')
  .add('testClass')
  .css({ 'background-color': 'black' });
.testClass { color: red; }
<div id="test">Testing</div>

关于javascript - 如何在多个函数中返回相同的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43485176/

相关文章:

javascript - css3 动画文字居中对齐

Javascript递归,foreach循环不会退出?

javascript - Laravel 4 - 未捕获类型错误 : Cannot read property 'post' of undefined

javascript - 如果使用 preventDefault,AngularJS 复选框 ng-checked 不呈现

javascript - 隐藏内容以防止在 JavaScript 制作的游戏中作弊

javascript - 如何将 Socket.IO-Client 连接到 Sails.js 服务器?

javascript - enzyme 模拟返回零节点

javascript - 在 vue 中使用 jest 时编译失败但测试用例通过

javascript - 如果互联网可用,则导入 JavaScript 文件

javascript - 防止在 JavaScript 中冒泡和捕获时触发事件