使用闭包创建原型中引用的私有属性

时间:2012-08-24 18:45:54

标签: javascript

我想知道这是否是一种可接受的方法,可以在javascript中创建一个新类的原型中引用的私有属性。因此,不需要在构造函数中创建方法,如下所示:

function Bar(){ 
  var bar = 'bar';
  this.getbar = function(){
    return bar
  }
}

我想把getbar方法放在原型中:

var Bar;
(function(){
  var bar = 'bar';
  Bar = function(){};
  Bar.prototype.getbar = function(){
    return bar;
  };
})();

1 个答案:

答案 0 :(得分:1)

对你来说这不会特别有用。

var foo = new Bar();
var foo1 = new Bar();
var foo2 = new Bar();

每个人都会在.getBar()

中拥有 完全相同的值

.prototype NOT 可以访问私有变量。

你所拥有的实际上更像是静态属性而不是实例的私有属性。

如果你想这样做,你需要创建一个公共访问器,然后你可以从原型(或代码的任何其他部分,因为它是公共的)调用。

function Wallet (amount) {
    var balance = amount; // this will be unique to each wallet
    this.getBalance = function () { return balance; };
    this.addToBalance = function (amount) { balance += amount; };
    // these ***NEED*** to be in the constructor to have access to balance
}

Wallet.prototype.addFunds = function (amount) { this.addToBalance(amount); };
Wallet.prototype.checkFunds = function () { return this.getBalance(); };


var wallet = new Wallet(371.00);
wallet.addFunds(2.00);

现在,您的原型可以访问公共方法,这些方法本身可以访问私有变量 ...但为什么要经历这个麻烦,把它放在原型中,当你可以使用实例的公共方法时 (这就是我无论如何,我正在制作原型

道德是,如果对象 具有面向公众的数据,则可以随意将所有方法移至原型。

但是如果在任何对象中都存在任何私有状态,那么任何应该访问该状态的方法都需要在构造函数中,以及任何只使用公共状态的方法(即:用this调用可以在原型中。