How to add private variable to this Javascript object literal snippet?

后端 未结 3 748
后悔当初
后悔当初 2020-12-14 10:25

Found this at MDC but how if I\'d wanted to add a private variable to the

var dataset = {
    tables:{
        customers:{
            cols:[ /*here*/ ],
            


        
3条回答
  •  春和景丽
    2020-12-14 10:57

    You can't have "private" variables without a function involved. Functions are the only way to introduce a new scope in javascript.

    But never fear, you can add functions in the right place to gain this sort of functionality with your object

    var dataset = {
      tables: {
        customers:(function(){
          var privateVar = 'foo';
          return { 
            cols:[ /*here*/ ],
            rows:[ /*here*/ ]
          }
        }()),
        orders:{
          cols:[ /*here*/ ],
          rows:[ /*here*/ ]
        }
      },
      relations: [{
        parent:'customers', 
        child:'orders', 
        keyparent:'custid', 
        keychild:'orderid',
        onetomany:true
      }]
    };
    

    But this doesn't gain us much. This is still mostly just a bunch of literal objects. These types of "Private" variables have zero meaning since there are no methods - nothing that would actually read or otherwise use the variables in the scope we created by adding a function (a closure).

    But if we had a method, that might actually start to become useful.

    var dataset = {
      tables: {
        customers:(function(){
          var privateVar = 'foo';
          return { 
            cols:[ /*here*/ ],
            rows:[ /*here*/ ],
            getPrivateVar: function()
            {
              return privateVar;
            }
          };
        }()),
        orders:{
          cols:[ /*here*/ ],
          rows:[ /*here*/ ]
        }
      },
      relations: [{
        parent:'customers', 
        child:'orders', 
        keyparent:'custid', 
        keychild:'orderid',
        onetomany:true
      }]
    };
    
    alert( dataset.tables.customers.getPrivateVar() );
    

提交回复
热议问题