模块化模式中的私有实例变量

时间:2013-11-01 14:12:41

标签: javascript

var foo = (function(){

    var _blah;

    function doStuff(){
        //how to make _blah instance specific
        //and access it here?
    }

    function bar(blah){
        _blah = blah;
        doStuff();
        //this.blah = blah?
    }

    bar.prototype.getBlah = function(){ return _blah; };

    return bar;

})();

var foos = [];

$.each([1,2,3], function(i, v){
    var f = new foo(v);
    foos.push(f);
});

//all instances of foo
//gets _blah set to 3
console.log(foos[1].getBlah()); 

我对上述模块有两个问题:

  • 如何设置特定于每个实例的属性?现在你可以看到_blah被覆盖了,这很明显。但我需要一些语法方面的帮助。我的猜测是我需要在构造函数中像注释一样设置它。这是正确的方法吗?
  • 如何以其他方式访问该属性?据我所知,this引用window中的doStuff()

http://jsfiddle.net/ncg2M/1/

1 个答案:

答案 0 :(得分:2)

  

如何设置特定于每个实例的属性?现在你可以看到_blah被覆盖了,这很明显。但我需要一些语法方面的帮助。我的猜测是我需要在构造函数中像注释一样设置它。这是正确的方法吗?

是。这是使用this.blah = // value执行此操作的正确方法,但当然这会使变量blah无限制地公开访问。

  

如何以其他方式访问该属性?据我所知,这是指doStuff()中的窗口。

doStuff()方法没有多大意义,因为当您在模块中定义类似函数时,它通常是其他实例方法使用的实用函数。