【问题标题】:Return Function Arguments from another Function从另一个函数返回函数参数
【发布时间】:2018-04-11 17:42:37
【问题描述】:

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

注意:最后一个接受三个参数的函数是一个名为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)

【问题讨论】:

  • idk 但可能 apply 调用与上下文混淆了。也许使用传播代替会修复它。 md.use(...aside('warning'));

标签: javascript function apply


【解决方案1】:

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

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

试试这个:

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

MDN

【讨论】:

  • 花了太长时间试图让它工作,感谢您的帮助和明确的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2023-01-28
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多