Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “我应该如何操作?”;“私人”;具有相同原型的其他对象的成员?_Javascript_Oop_Functional Programming - Fatal编程技术网

Javascript “我应该如何操作?”;“私人”;具有相同原型的其他对象的成员?

Javascript “我应该如何操作?”;“私人”;具有相同原型的其他对象的成员?,javascript,oop,functional-programming,Javascript,Oop,Functional Programming,在基于类的语言(如Java)中,我有时会利用一个事实,即类的私有成员可以被同一类的其他对象访问。比如说, 类位集{ 私有int[]字; 公共void和(位集){ for(int i=0;i

在基于类的语言(如Java)中,我有时会利用一个事实,即类的私有成员可以被同一类的其他对象访问。比如说,

类位集{
私有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;
        }
    });