2015-11-04 2 views
0

Я немного потерял это. Я знаю, что мне нужно назначить это другой переменной (ex: var), чтобы методы могли быть целыми. Без модификации modifyFunction, с кем я смогу сделать эту цепочку? Если кто-нибудь из вас может это понять, тогда вы можете мне это объяснить?Цепные методы объекта

function modifyFunction(f) { 
    console.log(f); 
    return function() { 
     var returnValue = f.apply(this, arguments); 

     if (returnValue == undefined) { 
      return this; 
     } else { 
      return returnValue; 
     } 
    }; 
} 

function modifyMethod(o, m) { 
    if (o.hasOwnProperty(m)) { 
     console.log(o[m] instanceof Function); 
     if (o[m] instanceof Function) { 
      if (m == "add") { 
       modifyFunction(this.o[m]); 
      } 
      console.log(this.o[m]); 
      modifyFunction(o[m]); 
      return this; 
     } 
    } else { 
     return this 
    } 
} 


var o = { 
    num: 0, 
    add: function(x) { 
     return this.num += x; 
    }, 
    sub: function(x) { 
     return this.num -= x; 
    } 
}; 

// We can't chain object o's method because they don't return "this" 
//o.add(4).sub(2); // fail - the methods aren't chainable yet! 

// Make the add method chainable. 
modifyMethod(o, "add"); 

// Now we can chain the add methods 
o.add(2).add(4); 
console.log(o.num); // o.num = 6 

// Now make the sub method chainable 
modifyMethod(o, "sub"); 

// Now we can chain both the sub and add methods 
o.sub(1).add(3).sub(5); 
console.log(o.num); // o.num = 3 
+0

ТОЛЬКО модификация функции modifyMethod :) – DevBear15

ответ

0

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

var o = { 
 
    num: 0, 
 
    add: function(x) { 
 
    this.num += x; 
 
    return this; 
 
    }, 
 
    sub: function(x) { 
 
    this.num -= x; 
 
    return this; 
 
    }, 
 
    square: function() { 
 
    this.num = this.num * this.num; 
 
    return this; 
 
    } 
 
}; 
 

 
document.body.innerText = o.add(5).sub(2).add(4).square().num;

Однако, вам придется извлечь последнее значение путем доступа к .num или путем вызова специальной функции, такой как value().

+0

Просто модификация modifyMethod .. Ничего другого – DevBear15

+0

@ CodingBear15 Исходный вопрос содержит «Без модификации modifyFunction». Вы хотите заставить его работать только путем редактирования 'modifyFunction'? –

+0

Неплохо, я хотел сказать только об изменении функции modifyMethod. – DevBear15

Смежные вопросы