警告:如果使用此功能,Axios会损坏,但fetch不会
简言之,我想问是否有一种标准的方法可以独立于类型来链接函数,使用类似的实现不会破坏原生原型:
Object.prototype.pipe = function (func) {
return func(this)
}
编辑:如果您想避免在枚举任何对象的键时出现该方法的可枚举错误,并且它是一个定义松散的方法,请使用以下方法
Object.defineProperty(Object.prototype, 'pipe', {
value(func) {
return func(this)
}
})
这将允许执行以下操作:
const preloadContext = require.context('@/', true, /.preload.vue$/)
const preloadComponents = preloadContext
.keys()
.map(fileName => {
const name = fileName
.split('/')
.pop()
.replace(/.w+.w+$/, '')
.pipe(camelCase)
.pipe(upperFirst)
const component = filename
.pipe(preloadContext)
.pipe(config => config.default || config)
Vue.component(name, component)
return [name, component]
})
.pipe(Object.fromEntries)
而不是
const preloadContext = require.context('@/', true, /.preload.vue$/)
const preloadComponents = Object.fromEntries(preloadContext
.keys()
.map(fileName => {
const name = upperFirst(camelCase(fileName
.split('/')
.pop()
.replace(/.w+.w+$/, '')
))
const config = preloadContext(fileName)
const component = config.default || config
Vue.component(name, component)
return [name, component]
})
)
不,没有真正的标准方法。不过,对于运营商来说,有一个第一阶段的建议:
const name = fileName
.split('/')
.pop()
.replace(/.w+.w+$/, '')
|> camelCase
|> upperFirst
今天你可以使用像Babel这样的重写工具。
不过,如果您不想使用重写工具,我肯定不会创建Object.prototype.pipe
。仍有更清洁的非理想选择:
const pipe = (value, fns) =>
fns.reduce((acc, fn) => fn(acc), value);
const pipe = (value, fns) =>
fns.reduce((acc, fn) => fn(acc), value);
const foo = pipe('Mzg0MA==', [
atob,
Number,
x => x.toString(16),
]);
console.log(foo);
(许多有用的函数集合和单独的包实现了这一点。(