使用闭包创建原型中引用的私有属性
using closures to create private properties referenced in prototypes
我想知道这是否是一种可以接受的创建私有属性的方法,以便在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
调用)都可以在原型中。
相关文章:
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 无法获取属性'Id'使用Knockout.js的未定义或空引用API
- 如何正确引用传递到淘汰中的当前元素的属性.JS
- 如何使用object.assign()从其他对象引用基本对象属性
- 引用Ractive.js中的子属性
- 无法获取属性'字符串'的未定义或null引用IE 11 ASP.NET
- 使用闭包创建原型中引用的私有属性
- SCRIPT5007:无法获取属性'长度'的未定义引用或null引用
- 无法获取属性'setActionableButtonState'的未定义引用或null引用
- 传递引用 jQuery 后无法访问元素属性
- 对象属性引用JavaScript中的其他对象属性
- 函数作为对象中的属性:引用函数内部的其他属性
- 从另一个属性引用js属性的正确方式
- 使用Aurelia's ref属性引用元素的视图模型
- 在javascript中分配属性引用
- 当对象属性引用对象本身(self reference)时,Javascript内存泄漏
- angular ng-repeat内部的动态属性引用
- 如何从p:对话头属性引用javascript变量
- 如何通过属性引用javascript对象's onclick方法
- 动态地从对象循环键传递属性引用