Wybieranie funkcji do wykonania - call
Jak zbudować program, który pozwoli wybrać użytkownikowi funkcję, którą należy wykonać?
Function.prototype.call(thisArg) Function.prototype.call(thisArg, arg1, arg2... argn)
- Parametry:
- thisArg - wartość bieżącego obiektu
this
dostępnego w czasie wywołania wewnątrz ciała funkcji - arg1, arg2... argn - lista argumentów wywołania funkcji
- Wartość:
- wartość którą normalnie zwraca funkcja
- Wyjątki:
TypeError
- nastąpiła próba wywołania na obiekcie, który nie jest funkcją
Działa analogicznie jak Object.prototype.apply, ale pozwala przekazać listę argumentów w sposób tradycyjny, a nie poprzez tablicę. Może to być przydatne, jeżeli wiemy z góry, jakie argumenty będziemy chcieli przekazać, ale w momencie tworzenia programu nie wiadomo jeszcze, którą funkcję będziemy chcieli wywołać.
Przykład Function.prototype.call
var f = function (a, b) { return a + b; }; f(1, 2); // 3 f.call(null, 1, 2); // 3 var Person = function (name) { this.name = name; }; Person.prototype.speak = function (speech) { return this.name + ": " + speech; }; var Computer = function (name) { this.name = name; }; var obj = new Computer('HAL 9000'); var txt = 'My mind is going. I can feel it.'; Person.prototype.speak.call(obj, txt); // "HAL 9000: My mind is going. I can feel it." Function.prototype.call.call(null); // TypeError Function.prototype.call.call(undefined); // TypeError Function.prototype.call.call("test"); // TypeError Function.prototype.call.call({}); // TypeError