Javascript 将函数设置为已弃用

Javascript 将函数设置为已弃用,javascript,Javascript,几个月前,我在Npm上创建了一个Js库。 现在我想重命名一些函数。 我读过,我觉得它很有用 假设我有一个文件a: 导出函数function1(param1,param2){ 返回param1+param2 } 库用户可以使用的导出函数位于index.js文件中: 从“/A”导出{function1} 我想把它重命名为sum(param1,param2) 我创建了这个过时的函数: 函数已过时(newFunction、oldFnName、newFnName){ 常量包装器=函数(){ conso

几个月前,我在Npm上创建了一个Js库。 现在我想重命名一些函数。 我读过,我觉得它很有用

假设我有一个文件
a

导出函数function1(param1,param2){
返回param1+param2
}
库用户可以使用的导出函数位于index.js文件中:

从“/A”导出{function1}
我想把它重命名为
sum(param1,param2)

我创建了这个
过时的
函数:

函数已过时(newFunction、oldFnName、newFnName){
常量包装器=函数(){
console.warn(
`名为的过时函数。函数“${oldFnName}”已被弃用,请改用新的“${newFnName}”函数`
)
newFunction.apply(这个,参数)
}
wrapper.prototype=newFunction.prototype
返回包装器
}
现在我该怎么办? 我想我必须这样修改A文件:

/**@自2.0版以来已弃用*/
导出函数function1(param1、param2){
返回和(参数1,参数2)
}
导出函数和(param1,param2){
返回param1+param2
}
并将
sum
函数添加到索引文件中:

从“/A”导出{function1,sum}

然后呢?如何使用
过时的
功能?

好的,所以这个问题似乎是由您的评论引起的(现在似乎已被删除):

假设我有一个函数fun1,我想使它不推荐使用,并且 新函数是fun2。如何使用这个过时的函数?信息技术 看起来很有趣


因此,首先,您得到了一个JSdoc(
/***自2.0版以来已弃用)注释,该函数与此函数混淆了

JSDoc是一种用于注释JavaScript源代码文件的标记语言

因此,这只有在您计划创建JSdoc注释时才有用。我想你不会的。如果您使用的是JSdoc,那么它应该按原样工作吗


所以忽略这一点,我将回到你的问题上

查看代码,您可以像这样使用它(不是100%确定,因为我没有编写它):

//上一个问题中的函数
函数已过时(oldFunc、newFunc){
常量包装器=函数(){
console.warn(`WARNING!名为.function${oldFunc.name}的过时函数已被弃用,请改用新的${newFunc.name}函数!`)
newFunc.apply(此,参数)
}
wrapper.prototype=newFunc.prototype
返回包装器
}
//这是替代obsfunc的函数
函数newfunc(){
log('newcalled');
}
//这就是被“淘汰”的功能
函数obsfunc(p){
返回作废(obsfunc,newfunc)();
}
//当您调用过时的函数时,它实际上是新函数
//将被触发并在控制台中显示错误。

obsfunc()我意识到这可能不是非常有用,但如果您正在使用babel,您可能希望了解es7装饰器,它们正是针对像这样的用例的。虽然他们仍然没有本地浏览器支持,因此巴贝尔

函数已过时(newFuncGetter)
{
返回(原型、键、描述符)=>{
descriptor.value=(…参数)=>{
常量newFunc=newFuncGetter();
console.warn(“${key}”已被弃用,请改用“${newFunc.name}”!`);
返回newFunc(…参数);
};
返回描述符;
};
}
福班
{
静态newfunc()
{
返回“新呼叫”;
}
@过时(()=>Bar.newfunc)
静态obsfunc()
{
返回“旧值”;
}
}
console.log(Bar.obsfunc());
我发现babel只允许类及其项上的decorator,但我相信实际的decorator也应该允许单独的函数

无法将函数“设置”为不推荐的。您只需创建一个类似于以下内容的函数:

function function1 () {
obsolete(function1(), "function1", "newFunction1")

}

过时的
函数的用法非常简单:

您只需将新函数传递给它:

/**@自2.0版以来已弃用*/
export const function1=过时(函数function1(param1,param2){
返回param1+param2
}、函数1、和)
您可以在
过时的
声明中添加的另一个小调整是名称设置,以便过时的函数看起来与原始函数相同(这将避免破坏任何人的代码):

函数已过时(newFunction、oldFnName、newFnName){
常量包装器=函数(){
console.warn(
`名为的过时函数。函数“${oldFnName}”已被弃用,请改用新的“${newFnName}”函数`
)
newFunction.apply(这个,参数)
}
wrapper.prototype=newFunction.prototype
Object.defineProperty(包装器,'name'{
值:oldName,
可枚举:正确,
可配置:true
}
返回包装器
}
但是,如果您只是重命名一个方法,可以通过将新方法的引用传递给
过时的
,来避免重新定义:

导出函数和(param1,param2){
返回param1+param2
}
/**@自版本2.0起已弃用*/
export const function1=过时(sum,'function1','sum')

使用上面的名称修复程序,这甚至可以将您不推荐使用的新函数版本重命名为其旧名称,而无需手动创建包装器。

谢谢您的回答,但在我的例子中,函数有参数和返回值。在这种情况下我该怎么办?另外,您能解释一下您的代码吗?是的,我还使用了JSdoc.p.s.
newFuncGetter
是必需的,因为
Bar
不可用(因为它尚未初始化),因此需要一个小的解决方法为什么不使用此问题的公认答案?@philmcole您的意思是这样的
/***@自1.0版以来已弃用。将在3.0版中删除。请改用sum.*/function function 1(param1