Javascript “我应该如何操作?”;“私人”;具有相同原型的其他对象的成员?
在基于类的语言(如Java)中,我有时会利用一个事实,即类的私有成员可以被同一类的其他对象访问。比如说,Javascript “我应该如何操作?”;“私人”;具有相同原型的其他对象的成员?,javascript,oop,functional-programming,Javascript,Oop,Functional Programming,在基于类的语言(如Java)中,我有时会利用一个事实,即类的私有成员可以被同一类的其他对象访问。比如说, 类位集{ 私有int[]字; 公共void和(位集){ for(int i=0;i
类位集{
私有int[]字;
公共void和(位集){
for(int i=0;i
现在,我正在使用JavaScript使用构造函数模式创建“私有”成员:
函数位集(){
var-words=[];
this.and=功能(设置){
//这大概就是我想要达到的目标。
对于(i=0;i
我知道我可能应该以不同的方式处理这个问题(而不是面向对象)。有人对更好的模式有什么建议吗?JavaScript是一种原型的面向对象编程语言,而不是一种经典的面向对象编程语言。JavaScript中没有类,但您可以将原型建模为类,因为:
CLASS
函数允许您创建类似于类的原型。然而,他们不是班级。与其他语言中的类不同,JavaScript中的原型没有访问说明符。所有内容必须是公开的或:
var位集=类({
构造函数:函数(){
this.words=[];
},
和:功能(集合){
var length=this.words.length,setWords=set.words;
对于(vari=0;i
事实上,JavaScript没有类或访问说明符是一件好事,因为您确实不需要它们。想想看。您真的需要Java等语言中的访问说明符吗?如果一切都是公开的,真的会有这么大的不同吗?依我拙见,不会的
有些人认为,公开一切都是不好的,因为它暴露了实现细节,不必要地干扰了用户API。不是真的。只是不要记录那些你想保密的财产。如果用户不需要知道某个属性,那么就不要记录它
如果出于安全目的需要将变量设为私有,那么JavaScript具有闭包。无论如何,其他对象(即使是同一类的对象)都不需要访问这些属性。因此,不应该出现这样的情况,即您需要将变量保持为私有,并使其他类的对象也可以访问它
最后,公开房产有很多好处:
JavaScript是一种原型的面向对象编程语言,而不是经典的面向对象编程语言。JavaScript中没有类,但您可以将原型建模为类,因为:
CLASS
函数允许您创建类似于类的原型。然而,他们不是班级。与其他语言中的类不同,JavaScript中的原型没有访问说明符。所有内容必须是公开的或:
var位集=类({
构造函数:函数(){
this.words=[];
},
和:功能(集合){
var length=this.words.length,setWords=set.words;
对于(vari=0;i
事实上,JavaScript没有类或访问说明符是一件好事,因为您确实不需要它们。想想看。您真的需要Java等语言中的访问说明符吗?如果一切都是公开的,真的会有这么大的不同吗?依我拙见,不会的
有些人认为,公开一切都是不好的,因为它暴露了实现细节,不必要地干扰了用户API。不是真的。只是不要记录那些你想保密的财产。如果用户不需要知道某个属性,那么就不要记录它
如果出于安全目的需要将变量设为私有,那么JavaScript具有闭包。无论如何,其他对象(即使是同一类的对象)都不需要访问这些属性。因此,不应该出现这样的情况,即您需要将变量保持为私有,并使其他类的对象也可以访问它
最后,公开房产有很多好处:
如果您不想将其公开,只需将其设置为变量,您仍然可以在构造函数中的任何位置调用它……javascript没有privat,但是闭包,这是不同的concept@philippjavascript绝对有私有成员。。。函数Foo(){var privatember=1;}var Foo=new Foo();控制台日志(foo.privatember)//“不起作用,因为它是私人的。”GeniaS。这是个了结,不是私事。我从来没有使用封闭模式来创建私密空间,因为在我看来这是毫无意义的。到
function CLASS(prototype) {
var constructor = prototype.constructor;
constructor.prototype = prototype;
return constructor;
}
var BitSet = CLASS({
constructor: function () {
this.words = [];
},
and: function (set) {
var length = this.words.length, setWords = set.words;
for (var i = 0; i < length; i++) this.words[i] &= setWords[i] || 0;
}
});