2015-01-14 15 views
6

PoniżejDlaczego typ zamknięcia nie jest - sprawdź parametry podczas używania function.apply?

/** 
* @param {string} a 
* @param {string} b 
*/ 
var f = function(a, b){ 
    // ... 
} 

/** 
* @param {string} a 
* @param {boolean} c 
*/ 
var h = function(a, c){ 
    f.apply(this, arguments); // no compile error 
    f.apply(this, [a, c]); // no compile error 
    f.call(this, a, c);  // compile error: does not match formal parameter 
} 

Dlaczego Zamknięcie podnieść błąd tylko przy użyciu połączenia i nie stosuje?
Czy istnieje sposób, w jaki mogę wykonać typ zamknięcia - sprawdź parametry, nawet gdy używam aplikacji?

+0

Czy możesz wpisać tablicę? – Bergi

+0

@Bergi, jeśli jest sposób, aby to zrobić, nie wiem. – oldergod

Odpowiedz

2

Ponieważ (a) sprawdzanie typu nie ma jeszcze pojęcia typu krotki i (b) rzadko wywołuje metodę z literałem tablicowym. Podczas używania .call określa się, który argument jest przypisany do którego parametru jest błahostka.

Jeśli system typów powiększa typ krotki, bardziej sensowne byłoby sprawdzenie go w bardziej szczegółowy sposób, ponieważ bardziej prawdopodobne jest, że typy "szczeliny" i długość tablicy są bardziej znane.

Powiązane problemy