Подтвердить что ты не робот

Цепочка метода объекта JavaScript: полезно?

Итак... возиться в JavaScript с идеей, которая для меня новая, с методами Object возвращает объект Object, частью которого они являются; это приводит к сцепляемости. Тогда мой вопрос: как это может быть полезно? Я бросил это вместе, чтобы проверить основные работы:

<script>
MathChain = function()
 {
    this.pass = function()
     {
        this.multiply = eval(arguments.join('*'));
        this.add = eval(arguments.join('+'));
        return this;
     }
 }

m = new MathChain().pass(5, 10, 20).multiply; // 1000
a = new MathChain().pass(5, 10, 20).add;      // 35
</script>

Это явно не злобно эффективный экземпляр, в котором можно было бы использовать эту концепцию, так что вы могли бы указать мне на то, что делает это правильно (кроме jQuery, пожалуйста)?

4b9b3361

Ответ 1

Ну, вот пример не очень реального мира, но я думаю, вы поймете эту идею. Если позволяет выполнять несколько различных операций над объектом и обеспечивает удобство.

var truck = function() {

    this.turnLeft = function {

       // turn left
       return this;

    }

    this.turnRight = function {

       // turn right
       return this;

    }

    this.goReallyFast = function {

       // go fast!
       return this;

    }

};

// My get-away plan
var myTruck = new truck();
myTruck.turnLeft().turnRight().goReallyFast();

Ответ 2

Для совершенно другого (не-OO) примера цепочка несколько похожа на Unix-конвейеры. Каждый шаг Unix-канала возвращает полный (измененный) контент, подходящий для отправки на следующий шаг:

cat file1 file2 | sort -n | awk '{print $2}' | sed 's/@/ at /g'

Ответ 3

Свободный интерфейс - http://en.wikipedia.org/wiki/Fluent_interface

Да, я думаю, что это может быть очень полезно, но, как любой шаблон дизайна, следует использовать только при необходимости

Изменить: здесь клиент twi api в С# с использованием свободного интерфейса - http://code.google.com/p/tweetsharp/

Ответ 4

Один пример, где это полезно, с небольшим изменением вашей проблемы — вместо того, чтобы возвращать один и тот же объект, вы создаете объект неизменным. Затем ваши функции возвратят новый экземпляр того же типа, но с уже установленными свойствами.

У этого есть много практических приложений, особенно в области функционального программирования.

Ответ 5

Пока он работает не так, как ваш пример (TBH, я никогда не видел, чтобы это делалось ранее), jquery считает, что "цепочка" чтобы быть очень полезным, а jquery в значительной степени является мерилом в наши дни, когда дело доходит до веб-фреймворков JS... так что да: -)

Ответ 6

Я нашел этот вопрос, ища общее решение о том, как сделать методы целыми, после того как они определены. Вот что я придумал. Я неофит JavaScript; покупатель остерегается.

makeChainable = function() {
    var receiver = arguments[0]
    for (var i = 1; i < arguments.length; i++) {
        functionName = arguments[i];
        (function() {
            wrapped = receiver[functionName];
            receiver[functionName] = function() {
                wrapped.apply(receiver, arguments);
                return receiver;
            }
        })();
    }
}

daisy = {
    name: 'Daisy',
    moo:  function() { console.log(this.name + " moos!") }
}

makeChainable(daisy, 'moo');
daisy.moo().moo().moo();

Ответ 7

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

Например, возник вопрос о SO относительно нахождения первого элемента таблицы. Он может включать в себя множество циклов или цепочки команд.

Ответ 8

Цепочка JavaScript может быть очень полезна, если вы хотите выполнить последовательность действий над одним объектом. Я согласен с Майклом Лутоном ниже, с цепью следует обращаться осторожно. Если вы добавите один или два прикованных метода к объекту, который все еще доступен для чтения. Если вы начинаете добавлять четыре, пять или даже девять, тогда ваш код становится сложнее не только читать, но и поддерживать.

Ответ 9

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