Javascript Typescript:从方法参数内调用方法

Javascript Typescript:从方法参数内调用方法,javascript,class,methods,typescript,Javascript,Class,Methods,Typescript,我想这更像是一个好奇的问题,如果它能在typescript中实现就好了 基本上,我有一个类和两个方法,如下所示: 这可能吗? class MyClass{ private cleanup(str:String):String{ //clean up the string return str; //return sanitized string } //I want to do this insertString(this.cleanup(text_

我想这更像是一个好奇的问题,如果它能在typescript中实现就好了

基本上,我有一个类和两个方法,如下所示:

这可能吗?

class MyClass{
   private cleanup(str:String):String{
     //clean up the string
     return str; //return sanitized string
   }
   //I want to do this
   insertString(this.cleanup(text_1:String), this.cleanup(text_2:String)){
     console.log(text_1 + text_2);
   }
}

类MyClass{
私有清理(str:String):String{
//清理绳子
return str;//返回经过消毒的字符串
}
//我想这样做
insertString(this.cleanup(text_1:String)、this.cleanup(text_2:String)){
console.log(text_1+text_2);
}
}

而不是这个?

class MyClass{
   private cleanup(str:String):String{
     //clean up the string
     return str; //return sanitized string
   }
   //might get to long if I have to cleanup to many strings
   insertString(text_1:String, text_2:String){
     text_1 = this.cleanup(text_1)
     text_2 = this.cleanup(text_2)
     console.log(text_1 + text_2);
   }
}

类MyClass{
私有清理(str:String):String{
//清理绳子
return str;//返回经过消毒的字符串
}
//如果我要清理很多字符串,可能会拖得很长
insertString(文本1:String,文本2:String){
text_1=此.cleanup(text_1)
text_2=this.cleanup(text_2)
console.log(text_1+text_2);
}
}

您试图实现的不是从另一个方法签名调用方法。这更多的是关于处理参数列表

1:
参数
hack 您可以修改提供的
参数
数组,相应的命名参数也将更改

insertString(text_1:String, text_2:String) {
    // here text_1 and text_2 are not cleaned up yet
    for (var i = 0; i < arguments.length; i++) {
        arguments[i] = this.cleanup(arguments[i])
    }
    // text_1 and text_2 are now cleaned up
}
还有一种方法名为
CleanupMethod
(实际上是一家装饰工厂):

Cleanup函数作为参数传递给
CleanupMethod
factory。这样,您可以拥有不同的清理功能,例如:

@CleanupMethod(cleanupString)
insertString( @cleanup str1: string, @cleanup str2: string2 ){
    /*...*/
}
@CleanupMethod(cleanupNumber)
insertNumber( @cleanup n1: number ){
    /*...*/
}
如果需要,可以重写decorator代码并将cleanup函数移到parameter decorator,但这会增加所需的代码量:

@CleanupMethod
insertString( @cleanup(cleanupString) str1: string, @cleanup(cleanupNumber) n1: number ){
    /*...*/
}

This
insertString(This.cleanup(text\u 1:String)、This.cleanup(text\u 2:String))
不是函数声明,因此不可能。函数声明包含参数数量及其类型。如果你想用参数做些什么,就必须在函数体中做。@Tomalak甚至不用
insertString(text\u 1:String=this.cleanup(text\u 1),text\u 2:String=this.cleanup(text\u 2))
或类似语法的箭头函数?回答得好!这超出了我打算做的范围,但它仍然是有帮助和有见地的。
class MyClass{
    private cleanup(str:string):string{
        //clean up the string
        return '[sanitized ' + str + ']'; //return sanitized string
    }
    @CleanupMethod(MyClass.prototype.cleanup)
    insertString(text_1:string, @cleanup text_2:string){
        console.log(text_1 + text_2);
    }
    @CleanupMethod(MyClass.prototype.cleanup)
    insertNumber(n1: number, n2: number, @cleanup n3: number, n4: number, n5: number){
        console.log(`${n1} + ${n2} + ${n3} + ${n4} + ${n5}`)
    }
}
var m = new MyClass();
m.insertString('a', 'b') // outputs `a[sanitized b]`
m.insertNumber(10,20,30,40,50) // outputs `10 + 20 + [sanitized 30] + 40 + 50`
@CleanupMethod(cleanupString)
insertString( @cleanup str1: string, @cleanup str2: string2 ){
    /*...*/
}
@CleanupMethod(cleanupNumber)
insertNumber( @cleanup n1: number ){
    /*...*/
}
@CleanupMethod
insertString( @cleanup(cleanupString) str1: string, @cleanup(cleanupNumber) n1: number ){
    /*...*/
}