したがって、イベントリスナーを登録するプロトタイプオブジェクトがあります。リスナーは、オブジェクトと、発行されたイベントのソースを示す文字列を受け取ります。 オブジェクトは、いくつかの関数呼び出し(_convertToX(someObj)
、_convertToY(someObj)
、...)の引数になります。
私は何をしようとしていますを動的に私のconvert
関数を呼び出す(将来的にはさらに追加される可能性があります)、それぞれ正確に1つの引数(someObj
)が必要です。名前に応じて動的に関数を呼び出す
// constructor
const MyFactory = function() {
// ...
$rootScope.$on('someObj:changed', (event, someObj, source) => {
// TODO: call converters dynamically, but not the one which converts back to the source
// source can be 'X', 'Y' or 'Z'
});
}
MyFactory.prototype._convertToX = function (someObj) {
// TODO: convert to X and emit
};
MyFactory.prototype._convertToY = function (someObj) {
// TODO: convert to Y and emit
};
MyFactory.prototype._convertToZ = function (someObj) {
// TODO: convert to Z and emit
};
すでに私のアプローチは、すべての配列を作成することです
...そこSO上で同様の質問かもしれませんが、私は右の検索用語を見つける方法を知りませんでしたconverter
関数を呼び出し、それらを配列から呼び出します。私が見ている問題は、私がsource
に変換するコンバータを呼び出さないようにするにはどうすればいいですか?
/**
* Hold references to all converters.
* @type {Array<function>}
*/
this._converters = [
this._convertToX,
this._convertToY,
this._convertToZ
];
// assume source is 'Z'
$rootScope.$on('someObj:changed', (event, someObj, source) => {
// how to call each function in this._converters with someObj as argument
// except this._convertToZ(someObj) ?
});
これはきれいなアプローチですか?これを行う方法?
これを実装するクリーナー/シンプルな方法がありますか?
答えのためのThx。しかし、私はソースコンバータを除いて**すべてのコンバータを呼び出す必要があるので、私はまだすべてのコンバータ関数の参照を保持する配列が必要でしょうか? – lenny
@lenny、更新された答えを見て、私は 'sources'のリファレンスを保存することを好むでしょう – Satpal