Javascript как добавить функцию к функции?

Добрый день господа, возможно и дамы.

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

module.exports = function(filename, callback){
     callback(filename)
}

module.exports.save = function(filename){
    ...fs...save()
}


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

Mdl('file.json', function(data){
	data['blablabla'] = 12345;
}).save();


т.е у fs есть pipe(), on(), и прочее, вот я хочу понять как это реализовать, оригинал функции увидел на

там происходит ряд манипуляций, и в конце можно вызвать save('file')

Пример.
ffmpeg('/path/to/file.avi')
  .videoCodec('libx264')
  .audioCodec('libmp3lame')
  .size('320x240')
  .on('error', function(err) {
    console.log('An error occurred: ' + err.message);
  })
  .on('end', function() {
    console.log('Processing finished !');
  })
  .save('/path/to/output.mp4');


Вот как реализована эта последовательность функций?

--UPDATE, так я немного разобрался
Но вопрос, как реализовывается .save()?
если в колбеке основной функции, я записываю локальную дату
Mdl('file.json', function(data){
	data['blablabla'] = 12345;
}).save();

То как ее передать в save без аргумента?
В ffmpeg указывается лишь путь + имя файла,
реализация save() примерно такая
module.exports = function(filename, callback){
	this.data = callback(require(filename));
    return { 
        save: function() {
			//console.log(callback);
			fs.writeFile(filename, data);
        }
    };
}


Не могу понять что к чему...
  • Вопрос задан
  • 817 просмотров
Решения вопроса 2
Для этого надо просто возвращать из каждой функции в цепочке некий объект, в котором будут методы типа save. Самый упрощенный пример:
function foo() {
    return { 
        save: function() {
            return true;
        }
    };
}

foo().save(); // true

В случае ООП эта цепочка возвращала бы экземпляр класса (instance of class). А в экземпляре класса уже можно вызывать методы этого самого класса.
class Foo {
    constructor() {}
    someMethod() {
        return this;
    }
    anotherMethod() {
        return this;
    }
    save() {
        return this;
    }
}

var obj = new Foo();
obj.someMethod().anotherMethod().save().someMethod().anotherMethod().save();
Ответ написан
Комментировать
EVAS
@EVAS
Буль :)
В js глобальная переменная window в ноде это object, можешь из своей функции передать глобальному объекту, типа
global.data['blablabla'] = 12345;
Или использовать базу данных :)

Ну как пишут здесь, вернуть обратно не возможно, только использовать какие-то библеотеки
stackoverflow.com/questions/6847697/how-to-return-...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы