我想知道这是否是一种可接受的方法,可以在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;
};
})();
答案 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
调用可以在原型中。