2017-01-19 5 views
1

У меня есть один простой расчет объекта функция .I был передать данные объекта результирующих в другую функцию объекта, как цепная реакцияPass результат одного объекта на другую функцию объекта как цепи

пример, как:

str.replace().replace().replace() Они передают результирующие данные первой замены на вторую, как цепная реакция.

Так что я хочу создать приведенный ниже код. Но не работает в моем случае.

Смотрите ниже фрагмент кода

var m=function(data){ 
 
    return { 
 
     str :data, 
 
     plus:function(b){ 
 
      this.str = this.str+b; 
 
      return this.str; 
 
     }, 
 
     min:function(a){ 
 
      this.str = this.str-a 
 
      return this.str; 
 
     } 
 
    } 
 
    } 
 

 
console.log(m(5).plus(1).min(3))

Если 5 добавить с 1 является 6 .Затем передать функции 6 в min() для уменьшения 3 .finally console.log результат 3 .Но У него есть некоторые здесь. Пожалуйста, помогите решить мою проблему.

Благодаря

ответ

2

Предлагают использовать объект и вернуть этот объект после вызова метода. Для лучшего использования вы можете использовать методы toString и valueOf для непосредственного использования возвращаемого значения.

Что нужно, так это вернуть весь объект, для всех методов, которые могут быть связаны друг с другом.

var m = function(value){ 
 
    var obj = { 
 
      value: value, 
 
      plus: function (b) { 
 
       obj.value += b; 
 
       return obj; 
 
      }, 
 
      min: function(a) { 
 
       obj.value -= a; 
 
       return obj; 
 
      }, 
 
      toString: function() { return obj.value; }, 
 
      valueOf: function() { return obj.value; } 
 
     } 
 
     return obj; 
 
    } 
 

 
console.log(m(5).plus(1).min(3).value); 
 
alert(m(5).plus(1).min(3)); 
 
console.log(m(3).plus(7) - m(5).min(1));

+0

его нормально. Его не нравится, что' str.replace(). Заменить() '.its не существует какое-либо расширение (' его означает min (3) .value [значение] '). Если какой-либо другой способ создать такой или невозможно? , – prasanth

+0

Да, вы можете расширить, например, 'String' новым прототипом, например, вернуть строку с чем-то измененным, например' replace'. –

+0

что означает 'значение [значение]'? –

1

var m=function(data){ 
 
    return { 
 
     str :data, 
 
     plus:function(b){ 
 
      this.str = this.str+b; 
 
      return this; 
 
     }, 
 
     min:function(a){ 
 
      this.str = this.str-a 
 
      return this; 
 
     } 
 
    } 
 
    } 
 

 
console.log(m(5).plus(1).min(3).str)

Для создания церьте вызовы методы вы должны вернуться «это» из функции, после чего вы хотите цепь продолжать

+0

не нравится that.end с 'str' – prasanth

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