2012-11-18 2 views
1

Я пытаюсь сделать метод цепочки в сочетании с моими конструкторами, но я не совсем уверен, как это сделать. Вот мой код до сих пор:Конструкторы и цепочка методов в JavaScript

function Points(one, two, three) { 
this.one = one; 
this.two = two; 
this.three = three; 
} 

Points.prototype = { 

add: function() { 
    return this.result = this.one + this.two + this.three; 
}, 
multiply: function() { 
    return this.result * 30; 
} 

} 

var some = new Points(1, 1, 1); 
console.log(some.add().multiply()); 

Я пытаюсь вызвать метод умножения на возвращаемом значении методы добавления. Я знаю, что есть что-то очевидное, что я не делаю, но я просто не уверен, что это такое.

Любые мысли?

ответ

12

Вы не должны возвращать результат выражения. Вместо этого верните это.

Points.prototype = { 

    add: function() { 
     this.result = this.one + this.two + this.three; 
     return this; 
    }, 
    multiply: function() { 
     this.result = this.result * 30; 
     return this; 
    } 

} 

И затем использовать его как это: console.log(some.add().multiply().result);

+0

Ahh, конечно, конечно. Отлично, это то, что я искал. Мне интересно, почему есть '.result' на конце. Я знаю, что он возвращает свойство 'result'. Но как? – Sethen

+1

@ Сетэн: Хорошо, это хорошая редакция Сидхарта. в конце вызова .multiply() вы возвращаете экземпляр Point и свойство this.result разрешено на этом объекте, давая вам текущее значение свойства result – BuddhiP

+2

@Sethen: '.multiply()' возвращает 'this'. Таким образом, это то же самое, что доступ к 'this.result' или' some.result'. '.add' возвращает' this', поэтому вы можете называть его 'multiple', что также является свойством объекта. Это то же самое. –

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