と仮定します。私はlog
という関数を用意しています。JavaScript:任意の順序で連鎖メソッドを実行
これらの機能の両方が機能するように私のコードをリファクタリングすることはできますか?
log("needsChange").doSomethingWithTheStringBeforePrintingIt();
log("perfectStringToPrint");
と仮定します。私はlog
という関数を用意しています。JavaScript:任意の順序で連鎖メソッドを実行
これらの機能の両方が機能するように私のコードをリファクタリングすることはできますか?
log("needsChange").doSomethingWithTheStringBeforePrintingIt();
log("perfectStringToPrint");
私は、ログが関数のdoSomething、またはそのメソッドを持つオブジェクトを返す場合、構文が可能です https://github.com/omidh28/clarifyjs
あなたは、ネストされたクラスのロジックと似たような行うことができます。
var logger = (function() {
//Class
var _log = (function() {
function _log(message) {
var _this = this;
this.message = message;
this.promise = null;
this.promises = [];
this.promise = Promise.all(this.promises).then(function(values) {
console.log(_this.message); // [3, 1337, "foo"]
});
}
_log.prototype.reverse = function() {
var self = this;
this.promises.push(new Promise(function(resolve, reject) {
setTimeout(resolve, 0, (function() {
self.message = self.message.split("").reverse().join("");
})());
}));
return this;
};
_log.prototype.capitalizeFirst = function() {
var self = this;
this.promises.push(new Promise(function(resolve, reject) {
setTimeout(resolve, 0, (function() {
self.message = self.message[0].toUpperCase() + self.message.substr(1);
})());
}));
return this;
};
return _log;
}());
//Instancer function
return function log(message) {
//Return instance of class
return new _log(message);
};
})();
//Test
logger("needsChange").reverse().capitalizeFirst().reverse(); //Capitalizes last letter
logger("perfectStringToPrint");
var log = (function() {
//Class
var _log = (function() {
function _log(message) {
this.message = message;
}
_log.prototype.doSomethingWithTheStringBeforePrintingIt = function() {
this.message = this.message.split("").reverse().join("");
return this;
};
_log.prototype.capitalizeFirstWord = function() {
this.message = this.message[0].toUpperCase() + this.message.substr(1);
return this;
};
_log.prototype.print = function() {
return this.message;
};
return _log;
}());
//Instancer function
return function log(message) {
//Return instance of class
return new _log(message);
};
})();
//Test
console.log(log("needsChange")
.doSomethingWithTheStringBeforePrintingIt()
.capitalizeFirstWord()
.print(), log("perfectStringToPrint")
.print());
を
これにより、.print
コールが不要になります。
ことは、この問題を解決するためのライブラリを作ってきました。 – Shilly
@ Shillyはい、問題は、文字列がすでに印刷されているため、何かをするのが遅れることです。 – omidh
文字列を印刷する前にすべての編集を行う必要があります。エミールの答えは、これがどのようにできるかをあなたに示しました。文字列が 'perfectStringToPrint'であるかどうかを検出する方法がある場合、 'needsChange'が完全ではないと検出された場合、実際のconsole.log呼び出しを 'doSomethingWithTheStringBeforePrintingIt'に移動することによってこの正確な構文を取得することは可能です。 – Shilly