2014-08-30 52 views
1

考慮一下:如何使用params數組調用var-args成員函數?

class A 
{ 
    fa(...args: any[]) 
    { 
     //args always has length of one 
     //and the first value in args is an array 
    } 
} 

var a = new A(); 
class B 
{ 
    f1(...args: any[]) 
    { 
     args.unshift('something'); 
     a.fa.apply(args); 
    } 
} 

這並不編譯,因爲FA()不是一個靜態函數。這個例子解決了fa()是靜態的情況下的問題:Passing array as arguments in TypeScript

但是,當它是一個成員函數時,我如何對fa應用''?

+0

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-08-30 02:49:56

回答

0

apply的第一個參數是this,所以只需使用a

修正你的a.fa.apply

class A 
{ 
    fa(...args: any[]) 
    { 
     console.log(args.length == 3); // true 
     console.log(args); 
    } 
} 
var a = new A(); 

class B 
{ 
    fb(...args: any[]) 
    { 
     args.unshift('second'); 
     a.fa.apply(a,args); 
    } 
} 
var b = new B(); 
b.fb('first','second'); 
+0

這是正確的答案。但有一件事我錯過了,我沒有在我的例子中是,當你打電話申請時,你可以只有2個參數,thisArg和參數。所以如果你有更多的參數需要添加,你必須將它們不加入參數。這是他們失蹤的關鍵。 – sheamus 2014-08-30 19:49:13

相關問題