イナヅマTVログ

JavaScriptでOOP – Classみたいなのにprivateな関数と変数

| 3件のコメント

前回の投稿「JavaScriptでOOP – privateぽい関数と変数, staticなやつ」ではstaticな関数と変数を作成しました。

今回はインスタンスが作成できるClassみたいなのにprivateな関数と変数を設定します。

var Product = (function () {
    var cost = 1000
    ,tax = 0.05
    ,price = function () {
        return cost * (tax + 1);
    }
    ,main = function () {
    };
    main.prototype = {
        tax: function (n) {
            tax = n;
        }
        ,price : function () {
            var p = price();
            var t = cost * tax;
            return [p,t,p-t];
        }
    };
    return main;
})();
 
var product = new Product();
console.log(product.price());//[1050,50,1000]
product.tax(0.08)
console.log(product.price());//[1080,80,1000]

これで完全にでは無いですがprivateな変数・関数も備わったClassのように使用できます。
new してインスタンスも作れます。

一番の問題はProductを上書きできることです。
Class名にあたるProductを保護する方法が無いものでしょうか。

update 2011-10-23 22:21
via anonymous : Object.frozen=true
ECMAScript 5にこんなのが追加されてるらしい。
雰囲気的にfrozenなので多分固定化できるんだろうけど使い方がイマイチ分かんないな。

MDN
https://developer.mozilla.org/ja/JavaScript/New_in_JavaScript/1.8.5

msdn
http://msdn.microsoft.com/en-us/library/ff806186(v=vs.94).aspx

ここら辺のリンクだろうなぁ。

update
*privateだけど
private は private だけど static になっちゃうんだよな〜
インスタンス毎に保持できるprivateな関数とか変数はConstructorに書くしかないんだろうか…

3件のコメント

  1. Object.frozen=true

  2. ピンバック: 宇都宮ウエブ制作所» ブログアーカイブ » Actionscript3erが覚えるJavascriptでのクラス開発まとめ

  3. ピンバック: 超個人的メモ, JavaScript関連の投稿リンクをまとめておく - イナヅマtvログ

コメントを残す

必須欄は * がついています