0

我想知道这是否是一种公认​​的创建私有属性的方法,以便在 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;
  };
})();
4

1 回答 1

1

它不会对你特别有用。

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

每个都将具有完全相同的值.getBar()

.prototype根本无法访问私有变量。

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

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

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);

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

寓意是,如果一个对象只有面向公众的数据,那么请随意将所有方法移至原型。

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

于 2012-08-24T19:53:35.147 回答