2012-03-07 10 views
0

私はJSオブジェクトの作成とプライベートメソッドへのアクセスを試みています。関数を返そうとしたときに実行している問題は、プライベートメソッドにアクセスできないことです。以下のコード。JSプライベートメソッドへのアクセス

var Item = (function() { 

    var price = 0; 
    var name = ''; 
    var description = ''; 
    var quantity = ''; 
    var attributes = {}; 

    var Item = function(data) { 

    } 

    function setPrice(variable) { 
     this.price = variable; 
    }; 

    function getPrice() { 
     return this.price; 
    }; 

    function setName(variable) { 
     this.name = variable; 
    }; 

    function getName() { 
     return this.name; 
    }; 

    function setDescription(variable) { 
     this.description = variable; 
    }; 

    function setQuantity(variable) { 
     this.quanity = variable; 
    }; 

    return function(data){ 

     setPrice : setPrice; 
     getPrice : getPrice; 
     setName : setName; 
     setDescription : setDescription; 
     setQuantity : setQuantity; 

     return new Item(data); 
    } 

})(); 

item2 = Item(); 
    item2.setPrice('3'); 
alert(item2.getPrice()); 

この設定では、どのようにプライベートメソッドにアクセスできますか?

+4

なぜあなたはアクセルしたいですかプライベートメソッドですか?彼らは理由のために私的です。 –

+0

私はRevealing Moduleと呼ばれるデザインパターンに従っています。 http://addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript –

+0

その設定はあまり意味がありません。自己実行機能から戻ってくる関数は、束のラベルを持っていて、関数を評価します。さらに、 'this'を'( 'を' = 'に変更した後に)追加すると、最後に' Item'を返すので便利なことはありません。 – icktoofay

答えて

2

私はあなたがしようとしているもののパターンはうまくいかないと思います。私はこのようなパターンを使用すると、コードを小さくして再利用できるようになると思います。このようにして、set機能も取り除くことができます。

ここにコードを修正
var Item = function(options) { 

    var opts = $.extend({ 
     price: 0, 
     name: '', 
     description: '', 
     quantity: '', 
     attributes: {} 
    }, options); 

    // ... 
    this.getPrice = function() { 
     return opts.price; 
    }; 

    // ... 
}; 

var item = new Item({ 
    price: 100, 
    name: 'onehundred', 
    // ... 
}); 

alert(item.getPrice()); 
+0

これで十分です。私はその欠点が何であるのだろうか。 –

1

http://jsfiddle.net/pratik136/JryAk/

アイテムが変更されました:

  • はあなたreturn声明
  • Itemあなたはクラスオブジェクトitem2
をインスタンス化しようとしていた、VARでチェック
+0

それはかなり動作しません、私は複数の異なるitems.Thatsを作る必要があるインスタンス化の理由。 –

関連する問題