LoginSignup
2
0

More than 3 years have passed since last update.

JavaScriptでclass構文を使ってみた

Posted at

はじめに

今作っている3D RPGを管理するためにクラス化して管理したくなって、ちょっと調べてみた。
で、privateメソッドとかできるのかな?と調べてみても、private 変数は宣言できてもメソッドはできないらしい。その辺も踏まえてちょっと試してみた。
ちなみに、ECMAScript 2015(ES6)で導入された機能らしい。
Windows10のIE11でエラーになったので、IEでは動かない。
Edgeはclass構文は問題なし。
private変数が使えなかった。
まぁ、Edgeに関してはChromiumベースになったら状況変わりそうだけど。
Appleはしらん。
ちなみにprivate fieldはいつ策定されたのかよくわからない・・・

class

JavaScriptでclassはこんな感じで書ける。

class Main{
    constructor(){
    }
}

とってもシンプル。
constructor()はなくても動作する模様。

変数の宣言

さて、変数の宣言はこんな感じ。

class Main{
    testVal = 1;
    #privateVal = 2;

    constructor(){
    }
}

変数の先頭に#を付けるとprivateな変数になる。
つけないと、publicな変数になる。

参照方法は

class Main{
    testVal = 1;
    #privateVal = 2;

    constructor(){
        alert(this.testVal + " / " + this.#privateVal );
    }
}

thisを付けて変数を参照することで利用可能となる。
インスタンスを作成した場合はこんな感じ

var main = new Main();
alert(main.testVal);

まぁ、普通の参照方法ですね。

private メソッドを考える

privateメソッドはメソッドの先頭に#を付ければできるかと思ったら、できなかった。
実現するにはググるといくつか出てくると思うが、自分の考えた方法はこんな感じ

class Main{
    //private fiels
    testVal = 1;
    #privateVal = 2;

    //private method
    #privateMethod = function(){
        return this.#privateVal;
    }

    constructor(){
    }

    callPrivateTestMethod(){
        alert(this.#privateMethod());
    }
}

var main;
window.addEventListener("load", function(e){
    main = new Main();
    main.callPrivateTestMethod();
});

private変数にメソッドを割り当ててprivateメソッドにする方法。
個人的にはこれで十分。

最後に

この方法がいいかどうかはわからないけど、とりあえずこれで3D RPGで使うクラスが作れそう。
お仕事でも使ってみたいけど、IEで動かす可能性も捨てきれないのがもやもやする。
IE早く消えてなくなってくれ!

あと、private 変数を#で始めるのはなんか、気持ち悪いw

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0