2016-06-18 3 views
1

Я выполняю итерацию через множество функций, и я могу назвать каждую функцию ИСПОЛЬЗОВАТЬ ОБЪЕКТ КАК КОНТЕКСТ, и я не знаю, как это сделать - попробовал применить, но это не сработает - я думаю, потому что я не полностью понять это, применить и т. д. С удовольствием о помощи!Как использовать объект, переданный в качестве контекста для внутренней функции?

function calling(obj,arr){ 
for (var i=0; i<arr.length;i++){ 
    arr[i].apply(null,obj); 
    } 
return arr; 
} 

    var fnA = [ 
     function() { 
      this.yes = true; 
     }, 
     function() { 
      this.no = false; 
     } 
    ]; 
    var obj = {}; 

    calling(obj, fnA); 
    obj.yes; //should return true 

ответ

5

Вы точно знаете, что вы читаете the documentation of Function.prototype.apply()?

thisArg, который устанавливает контекст выполнения, является первым параметром apply, а не второе:

arr[i].apply(obj); 

В качестве второго параметра, вы можете передать массив аргументов, что функция должна быть вызвана.

0

Это пример использования рекурсивного подхода. Если ваш массив функций должен быть неизменным, вам нужен цикл For вместо рекурсии (или сделать копию исходного массива).

var functions = [ 
    function() { this.yes = true; }, 
    function() { this.no = false; } 
]; 

var emptyObject = {}; 

function delegate(object, methods) { 
    if (methods.length) { 
     methods.splice(0, 1)[0].apply(object); 
     delegate(object, methods); 
    } 
} 

delegate(emptyObject, functions); 

console.log(emptyObject.yes); 
console.log(emptyObject.no);