【PhotoshopJavascript】ExtendScriptで擬似的に作ったクラスのメソッド内でインスタンス変数を使う

こちらで擬似的にクラスは作ってみたんですが、作ったメソッドの中でインスタンス変数使おうとしたら使えないじゃないですか……くそう疑似は疑似だったか。

先に結論:子メソッド内でインスタンス変数を使う方法

function Book(title, price){
    this.title = title
    this.price = price
    // メソッド代入用の変数に代入する無名変数内ならthisにアクセス可能
    this.get_title = function(){return this.title}
    // なので、無名変数の中でインスタンス変数を渡して本処理を呼んじゃえ
    this.get_taxin_price = function(){return __clac_taxin(this.price)}

    // 別に定義したメソッドからは、上のスコープのthisにはアクセスできない
    function __clac_taxin(price){ return price * 1.1 }
}

無名関数から本体処理を呼ぶときに、必要なインスタンス変数全部渡してしまう。
子メソッドからインスタンス変数への代入はできないけど、まあ、イミュータブルな設計にすればイイヨネ

スコープ変わるからthisにアクセス出来なくなる

this.title

とかの「this」っていうのは要するに「自分自身が持っている変数だよぉ」ってことなわけですが、自分の中にメソッド作った場合、その中で「this」っていうと「そのメソッド自身」を示しちゃうことになるのでああややこしい。

でも無名関数ならスコープ変わらないから、インスタンス変数に無名関数を代入して、その中で本体処理を呼び出し、その時に使いたいインスタンス変数を引数として渡してしまえば、メソッドの中でインスタンス変数を処理に使えます。
Setter的な、インスタンス変数を変更するタイプの処理は無名関数で作れば実装できるかなと思いますがまあインスタンス変数変更するのあんまり良くないんでね、強制イミュータブルってことで。


この記事が気に入ったらサポートをしてみませんか?