我正在尝试简化某些代码,但在将某些内容转换为函数时遇到错误。我正在有效地尝试创建一个接受单个输入的函数,然后返回三个最终作为另一个函数的三个参数的东西。
注意:将采用三个参数的最终函数是标题为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)
答案 0 :(得分:1)
在您第一次尝试时,对use()
的调用直接通过md
实例,因此在md
(this === md
)的上下文中调用。
在您的第二次尝试中,您使用md.use.apply(null)
来调用use()
而没有原始上下文(md
实例)。
请改为尝试:
md.use.apply(md, aside('warning'));
请参阅MDN