Javascript";私密的;不为每个对象重新创建的方法?
当四处寻找其他语言的私有方法时,通常建议Crockford的页面提出这种“私有化”方法: 所以Javascript";私密的;不为每个对象重新创建的方法?,javascript,oop,encapsulation,Javascript,Oop,Encapsulation,当四处寻找其他语言的私有方法时,通常建议Crockford的页面提出这种“私有化”方法: 所以服务是私有的-它可以访问私有方法(如dec)和私有变量(如secret)。我假设它也可以调用“public”方法(那些分配给Container.prototype)的方法 但是,不是为新容器的每个对象重新创建了服务吗?它不需要额外的时间和消耗额外的内存吗?就这一点而言,还有私人dec 我知道,推荐的JS方法是在KlassFunction.prototype上创建方法,以避免这种性能问题。但是,非公共方法
服务
是私有的-它可以访问私有方法(如dec
)和私有变量(如secret
)。我假设它也可以调用“public”方法(那些分配给Container.prototype
)的方法
但是,不是为新容器的每个对象重新创建了服务吗?它不需要额外的时间和消耗额外的内存吗?就这一点而言,还有私人dec
我知道,推荐的JS方法是在
KlassFunction.prototype
上创建方法,以避免这种性能问题。但是,非公共方法可以用这种方式创建吗?实际上有两种私有方法
private
用作安全机制。在Javascript中完全无用private
用于防止类内部的意外误用任何方式的功能。即使是暂时的原因,您也无法访问外部变量。也请阅读你完全正确。在
原型上设置它将允许所有实例引用一个函数,而不是每次实例化都重新创建它。但正如您所注意到的,该方法将无法引用构造函数中的任何“私有”变量。这通常是一种折衷。没有理由期望每次调用构造函数时都会重新创建私有函数的代码。运行时(可能)会创建一个新的函数实例,但现代实现将能够共享代码。我不认为内存使用应该是一个很大的问题,除非你们正在创建数以百万计的对象。
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
this.service = function () {
return dec() ? that.member : null;
};
}