从另一个函数返回函数参数

时间:2018-04-11 17:42:37

标签: javascript function apply

我正在尝试简化某些代码,但在将某些内容转换为函数时遇到错误。我正在有效地尝试创建一个接受单个输入的函数,然后返回三个最终作为另一个函数的三个参数的东西。

注意:将采用三个参数的最终函数是标题为md.use()的方法

原始(工作)代码如下:

md.use(require('markdown-it-container'), 'warning', {

  render: function (tokens, idx) {
    var m = tokens[idx].info;
    if (tokens[idx].nesting === 1) {
      return '<aside class="warning">' + md.utils.escapeHtml(m[0]);
    } else {
      return '</aside>\n';
    }
  }
});

我精简它/使其可重复使用的尝试是:

function aside(name) {
  return [require('markdown-it-container'), name, {

    render: function (tokens, idx) {
      var m = tokens[idx].info;
      if (tokens[idx].nesting === 1) {
        return '<aside class="' + name + '">' + md.utils.escapeHtml(m[0]);
      } else {
        return '</aside>\n';
      }
    }
  }]
}

md.use.apply(null, aside('warning'));

当我尝试构建时,这会产生以下错误:

TypeError: Cannot read property 'block' of null
    at Function.container_plugin (/Users/Paul/Development/shins/node_modules/markdown-it-container/index.js:138:6)
    at MarkdownIt.use (/Users/Paul/Development/shins/node_modules/markdown-it/lib/index.js:496:10)

1 个答案:

答案 0 :(得分:1)

在您第一次尝试时,对use()的调用直接通过md实例,因此在mdthis === md)的上下文中调用。

在您的第二次尝试中,您使用md.use.apply(null)来调用use()而没有原始上下文(md实例)。

请改为尝试:

md.use.apply(md, aside('warning'));

请参阅MDN