Przejdź do treści

Wywoływanie funkcji z tablicą argumentów - apply

Jak wywołać dowolną funkcję z listą argumentów zapisaną w tablicy?

Function.prototype.apply(thisArg)
Function.prototype.apply(thisArg, argArray)
Parametry:
thisArg - wartość bieżącego obiektu this dostępnego w czasie wywołania wewnątrz ciała funkcji
Array argArray - 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ą albo argArray nie jest obiektem

Zdarza się, że w naszym programie mamy dostępną listę argumentów w postaci tablicy i chcielibyśmy wywołać zadaną funkcję, przekazując jej taką właśnie listę argumentów. Niestety gdy zrobimy to w tradycyjny sposób, funkcja otrzyma tylko jeden argument - w postaci tablicy. Aby w takiej sytuacji skonwertować tablicę na tradycyjną listę argumentów, możemy się posłużyć funkcją apply.

Dzięki tej funkcji, możemy również wywołać metodę w kontekście innego obiektu niż ten, w którym została zdefiniowana, nawet jeżeli jedna klasa nie dziedziczy po drugiej.

Przykład Function.prototype.apply

var f = function (a, b) {
    return a + b;
};
var args = [1, 2];
 
f(args);                                  // "1,2undefined"
f.apply(null, args);                      // 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.apply(obj, [txt]); // "HAL 9000: My mind is going. I can feel it."
 
 
Function.prototype.apply.call(null);      // TypeError
Function.prototype.apply.call(undefined); // TypeError
Function.prototype.apply.call("test");    // TypeError
Function.prototype.apply.call({});        // TypeError
f.apply(null, "test");                    // TypeError

Komentarze

Zobacz więcej komentarzy

Facebook