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

using closures to create private properties referenced in prototypes

本文关键字:属性 引用 闭包 创建 原型      更新时间:2023-09-26

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

它对您不会特别有用。

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

现在,您的原型可以访问公共方法,而公共方法本身也可以访问私有变量
。。。但是,当你可以只使用实例的公共方法时,为什么要经历这个麻烦,把它放在原型中呢

寓意是,如果一个对象only具有面向公众的数据,那么可以随意将所有方法移动到原型。

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