(function () {
function User() {
//some properties
}
//private fn 1
User.prototype._aPrivateFn = function () {
//private function defined just like a public function,
//for convetion underscore character is added
}
//private function type 2
//a closure
function _anotherPrivateFunction() {
// do something
}
//public function
User.prototype.APublicFunction = function () {
//call private fn1
this._aPrivateFn();
//call private fn2
_anotherPrivateFunction();
}
window.UserX = User;
})();
//定义javascript对象私有方法的两种方法中哪一种更好,特别是在内存管理和性能方面。
答案 0 :(得分:12)
您的“私人功能#1”根本不是私密的。而版本#2已关闭,因此只能通过User
对象访问。
通常没有“更好”,但在这种情况下,在这种情况下,封闭的功能完全隐藏在外面的世界(这显然更好)。
仍然有传言说闭包会造成内存泄漏,这是错误的。闭包不会造成内存泄漏,但程序员可以/可以。你的例子完全没问题。
要使用私有方法,您应该使用几乎完全相同的模式。
var myObject = function() {
// privates
var a = 5,
b = 10,
c = a,
public = {};
public.getA = function() {
return a;
};
public.setA = function(v) {
a = v;
};
function privateOne() {
}
return public;
};
答案 1 :(得分:5)
如果您绝对必须(或想要)隐藏来自外部世界的函数,那么创建闭包会更好。
如果你关心的话,在原型中添加方法会更好:
答案 2 :(得分:1)
jQuery的John Resig对如何创建scoop / prototyping / inherits等进行了精彩的演示。