質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

486閲覧

javascriptのイベントのラッピング方法

yoyoyo555

総合スコア33

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2017/12/12 07:04

javascript

1lib.on("connection", () => { 2 this.connectionStatus = true; 3 console.log('接続'); 4});

上記のようなイベントが利用できるeventemitter2を
利用して作成されたライブラリがありまして、
このライブラリ利用のためのクラスを作成しています。

lib.onではなく

javascript

1class.conection(() => { 2 this.connectionStatus = true; 3 console.log('接続'); 4})

のように利用できるようなラッピングは可能でしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

やりたいことがよくわかりませんが…。

libというライブラリを持つクラスを定義して、クラス内で利用を想定する場合は以下かと。
staticではないので、クラスメソッドにしたければその辺りは設計依存で。

コールバック定義がアロー関数の場合は、thisが定義時点のthisコンテキストを利用するので
その辺りは実装設計依存で。

javascript

1// クラス定義 2class ConnectLibWrapper{ 3 /** 4 * 5 * @param {Library} lib 6 */ 7 constructor(lib){ 8 /** 9 * 10 * @type {Library} 11 * @private 12 */ 13 this._lib = lib; 14 } 15 16 /** 17 * 'connection'として接続する 18 * @param {function} libConnectionCallbackFunc 19 */ 20 connection(libConnectionCallbackFunc){ 21 if(typeof libConnectionCallbackFunc !== "function"){ 22 libConnectionCallbackFunc = this.getDefaultCallback; 23 } 24 this._lib.on("connection", libConnectionCallbackFunc); 25 } 26 27 getDefaultCallback(){ 28 console.log("コールバック関数が定義されていません。"); 29 } 30 } 31 32// 利用例 33var scope = this; 34// ライブラリ 35var lib = new Library(); 36// ライブラリのラッパクラス 37var connectLibWrapper = new ConnectLibWrapper(lib); 38// コネクション後のコールバック関数 39var callback = () => { 40 // 実質この時点でのthisは上記のscopeと同じになる 41 this.connectionStatus = true; 42 console.log('接続'); 43}; 44// 接続 45connectLibWrapper.connection(callback); 46

投稿2017/12/12 07:43

kanimaru

総合スコア1013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoyoyo555

2017/12/15 00:35

返事遅れて申し訳ありません。 素晴らしい回答ありがとうございます。 kanimaruさんのおかげでjavascriptの理解が深まりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問